Android için C veya C ++ 'da uygulamalar yazılsın mı? [kapalı]


286

Bir oyunu geliştirmeye / Android'e aktarmaya çalışıyorum, ancak C'de ve Android Java'yı destekliyor, ancak eminim orada bir C uygulaması almanın bir yolu olmalı, herkes bunu başarmanın bir yolunu biliyor mu?


Sadece AFAIK telefonu jailbreak yaparsanız.
Cogsy

64
İPhone'lar için jailbraking değil mi?
Robert Gould

1
G1 varsayılan olarak root erişimine izin vermez ve 'Android' ortamı dışında neler yapılabileceğiyle ilgili birçok kısıtlama vardır. Android içinden yerel kod yürütmek için bir yol bulmak fazla umut olmazdı.
Cogsy

2
ancak piyasadan Android için DOOM'u indirdim. Bu yüzden yapılabilir
Robert Gould

Yanıtlar:


247

Google üzerinden gelen herkes için, SDK 1.6 Android'den başlayarak artık resmi bir yerel SDK'ya sahip olduğunu unutmayın.

Android NDK'yı (Yerel Geliştirme Kiti) buradan indirebilirsiniz: https://developer.android.com/ndk/downloads/index.html

Ayrıca NDK hakkında bir blog yazısı var:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html


5
Tamam, şimdi nasıl C # ve .Net? -)
Avi

4
.Net desteği şimdiye kadar
görülemiyor



2
.net / c # kodu ve android için xamarin'e göz atın
bbqchickenrobot 16:12

41

Android NDK Böyle C ve C ++ kullanarak dili, yerel kodda uygulamanızın parçalarını uygulamak sağlayan bir araç setidir. Belirli uygulama türleri için bu, bu dillerde yazılmış kod kitaplıklarını yeniden kullanmanıza yardımcı olabilir.

Yerel geliştirmeye nasıl başlayacağınız hakkında daha fazla bilgi için bu bağlantıyı izleyin .

Örnek uygulamalar burada bulunabilir .


1
veya 2009, 2010, 2011, 2012 veya 2013
Christopher Berman

19

Normalde şunları yapmanız gerekir:

  1. Google Android NDK'yı yükleyin. Kütüphaneler, başlıklar, makfile örnekleri ve gcc araç zinciri içerir
  2. ARM için C kodunuzdan bir yürütülebilir dosya oluşturun, optimize edin ve gerekirse sağlanan kütüphanelere bağlayın
  3. Sağlanan adb arayüzünü kullanarak bir telefona bağlanın ve yürütülebilir dosyanızı test edin

Bir uygulama satmak istiyorsanız:

  1. C kodunuzdan bir kütüphane oluşturun
  2. Bu kütüphaneyi kullanacak basit Java kodu oluşturun
  3. Bu kütüphaneyi uygulama paketi dosyasına göm
  4. Uygulamanızı test edin
  5. Sat veya ücretsiz dağıt

Ben NDK yeni ve Android. lan herhangi çalıştırmak ref lan çalıştırmak istiyorum?
Parag Chauhan


12

Resmi tutum , bunun "yapmak istediğiniz" bir şey olmadığı anlaşılıyor . Bkz Konuyu Android Geliştiricileri listesinde. Google, Android'in çeşitli farklı cihazlarda (CPU'lar, ekranlar vb.) Çalışmasını öngörmektedir. Bu nedenle geliştirmeyi etkinleştirmenin en iyi yolu, Dalvik VM'yi hedefleyen (taşınabilir) yönetilen kodu kullanmaktır. Bu nedenle, Android SDK C / C ++ 'ı desteklemez.

ANCAK, bu sayfaya bir göz atın :

Android, Android sisteminin çeşitli bileşenleri tarafından kullanılan bir dizi C / C ++ kütüphanesi içerir. Bu özellikler Android uygulama çerçevesi aracılığıyla geliştiricilere açıktır.

Yönetilen uygulama çerçevesinin bu kütüphanelerin üstünde olduğu görülmektedir. Sayfa C / C ++ kütüphanelerini listeler: standart C kütüphanesi, medya, 3D, SQL lite ve diğerleri.

Tek ihtiyacınız olan, C / C ++ 'ı uygun CPU'ya (G1 durumunda ARM) derleyecek bir derleyici zinciri. Bunun nasıl yapılacağıyla ilgili bazı kısa talimatlar burada .

Ne bilmiyorum, bu kütüphanelerin sağladığı API'lerin açıklamalarını nerede bulabilirim. SDK'da bir yere gömülü başlık dosyaları olabilir, ancak belgeler kabataslak / eksik olabilir. Ama bence yapılabilir!

Umarım faydalıdır. Kayıt için, herhangi bir yerel android uygulaması yazmadım - sadece birkaç basit yönetilen uygulama.

Andy


4
Downvoting. NDK şimdi Android yerel kodu için resmi bir derleyici gibi görünüyor. Bu cevabı geçersiz kılmak.
unixman83

8

C'yi (veya diğer GCC dillerini) Java bayt koduna çevirmek için nestedvm komutunu kullanabilir ve bunu bağlantı noktanızın temeli olarak kullanabilirsiniz. Örneğin, Simon Tathams taşınabilir bulmaca koleksiyonunun Android bağlantı noktasına bakın .

Bu yöntemin NDK tarafından kullanılmamasını bekliyorum, ancak bazı ağlar veya bir şey insanların telefonlarını yükseltmesine izin vermiyorsa olmayabilir.


1
NDK'nın kullanılmamasına rağmen, NDK'ye bir alternatif için +1.
tobsen

Nestedvm diğer cihazlarla uyumlu değil mi?
charo

8

Google zaten Google I / O 2011'i başlattı : C ve C ++ Oyunlarını http://www.youtube.com/watch?v=5yorhsSPFG4 adresinde bulunan Android oturumuna getirme

android için c ve c ++ 'da uygulama yazmak için NDK kullanımını anlamak iyidir.

Sadece herhangi bir konsol tabanlı yerli oyun derlemek ve android üzerinde çalıştırmak istiyorsanız o zaman bu makale aynı için 3 yöntem göstermiştir.

1: Bağımsız araç zinciri kullanarak statik derleme

2: Android NDK'nın araç zincirini kullanarak çapraz derleme

3: AOSP kaynak kodunu kullanarak çapraz derleme


7

Belki de bunu arıyorsun?

http://www.mosync.com/

C ++ kullanarak çeşitli mobil platformlar için geliştirilmiş orta bir katmandır.


2
bağlantı 404 bulunamadı. Site sahibinin piyangoyu kazanması, eşinden boşanması ve Bahamalar'a taşınması durumunda orijinal gönderiden bazı içerikleri cevaba eklemek her zaman iyi bir fikirdir.
Zuzlx

7

Buna bakarak mümkün görünüyor:

"Aslında sadece Java dili destekleniyor diğer dillerde uygulama geliştiremezsiniz anlamına gelmez. Bu birçok geliştirici, bilgisayar korsanları ve mobil uygulama geliştirme uzmanları tarafından kanıtlanmıştır. Edgelib arkasındaki şirket Elements Interactive BV kütüphane, Android platformunda yerel C ++ uygulamalarını çalıştırmayı başardı, ancak şu anda ekran ve ses konusunda hala birçok sorun var ... vb. Bu S-Tris2 oyunu ve Edgelib'in 3D animasyon demosunu içeriyor. "







2

Ben bir öğretici bilmiyorum ama iyi bir geliştirme aracı: Ideaworks Labs Airplay SDK. (Son zamanlarda " Marmelade " olarak yeniden markalandı ) C / C ++ kullanarak Windows Mobile, iPhone, Android için uygulamalar oluşturabilirsiniz. Sevmediğim tek bileşen GUI bestecisiydi - bir arabası, ancak her zaman Not Defteri ile değiştirebilirsiniz.


2

C4droid'i indirebilir, ardından GCC eklentisini yükleyebilir ve SD'nize kurabilirsiniz. Kabuktan ben sadece GCC ikili olduğu dizine geçmek ve daha sonra bir yerleşik yürütülebilir yapmak için çağırır.

find / -name gcc

/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc

kedi> test.c

#include<stdio.h>
int main(){ 
 printf("hello arm!\n");
return 0;
}

./arm-linux-androideabi-gcc testi. c -o testi

./Ölçek

merhaba kol!



2

Ubuntu'nuzdaki yerel C / c ++ Dosyaları libstdc ++. * X86 (veya x86_64) ikili dosyalarıdır, ancak Android cihazlar ve emülatörler ARM'dir. Tabii ki, doğru soname ayarlasanız bile bu yine de çalışmaz. Bu, hiçbir yere götürmeyen çok saf bir yoldur. Android'in C ++ desteği çok sınırlıdır, yani istisna yoktur, standart C ++ kütüphanesi (STL dahil) ve RTTI. Böyle bir işleve ihtiyacınız varsa, özel NDK dağıtımımı kullanın.

http://crystax.net/android/ndk.php - yukarıda listelenen tam C ++ özelliklerini destekler.

Neden hata var: '__cxa_end_cleanup' bağlantı hatasına tanımsız başvuru. Android stlport

zaman. Çünkü libstdc + + bağlantısı yoktur. A. Çok yanlış.

Bazı statik kitaplık kullandığından, tam libstdc + + 'yı bağlamak gerekir. A. Can

http://crystax.net/android/ndk.phpPaketi indirmek için burada

kaynaklar \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi dizini.

Android kendi libstdc + + desteği ile sınırlıdır, tam bir libstdc + + ile bağlantılı olmalıdır. Bir iş.

Android.mk'de dosya ekle LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

 $ (LOCAL_PATH) / libs / liblua.a \
 `$ (LOCAL_PATH) / libs / libstdc + +. A`  

Ve LOCAL_CPPFLAGS + =-lstdc + +-fexceptionsderlenebilir


1

Android'in bir sonraki SDK sürümünde C / C ++ kütüphanelerine izin verme planı var (Codename Eclair?) Bugüne kadar Android Java SDK'sı ile mümkün değil. Ancak, BÜYÜK açık kaynak projesini alabilir, kendi kitaplıklarınızı yuvarlayabilir ve ardından kendi cihazınızı flaş edebilirsiniz ... ancak kitaplığınızı kullanmak isteyen herkesin özel yapınızı da flaş etmesi gerekir.


-7

Kısa cevap: Yapamazsınız.

@ Backslash17: makale ve kurulum talimatları ile aşağıdaki bağlantı bakarak, tüm şirket var android çerçeve atlayarak emülatör üzerinde kendinden derlenmiş bir çalıştırılabilir başlatmaktır. Emülatöre sahip olduktan sonra telnet yapabilir ve linux kabuğuna sahip olabilirsiniz. Bir linux programı çalıştırmak elbette çok önemlidir. Ancak bu, jailbreak (diğer adıyla root erişimi) olmayan telefonlar için geçerli değildir ve piyasaya sunulmaz.

Google başka fırsatlar açmazsa veya birisi Dil X'i Dalvik bayt koduna (Dalvik Android programlarını çalıştıran VM'dir) derleyen özel bir derleyici yazmadıkça yerel kod yazamazsınız.


Evet, bu yüzden "Görünüşe göre ..." yazdım. İnanmaya bakın!
backslash17
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.