Scrivi applicazioni in C o C ++ per Android? [chiuso]


286

Sto cercando di sviluppare / trasferire un gioco su Android, ma è in C e Android supporta Java, ma sono sicuro che ci deve essere un modo per ottenere un'app C lì, qualcuno sa come farlo?


solo se esegui il jailbreak del telefono AFAIK.
Cogsy,

64
Il jailbraking non è per iPhone?
Robert Gould,

1
G1 non consente l'accesso come root per impostazione predefinita e ci sono molte restrizioni in merito a ciò che può essere eseguito al di fuori dell'ambiente "Android". Non avrei molte speranze di trovare un modo per eseguire il codice nativo da Android.
Cogsy,

2
ma ho scaricato DOOM per Android dal marketplace. Quindi dovrebbe essere fattibile
Robert Gould,

Risposte:


247

Per chiunque venga a questo tramite Google, nota che a partire da SDK 1.6 Android ora ha un SDK nativo ufficiale.

Puoi scaricare Android NDK (Native Development Kit) da qui: https://developer.android.com/ndk/downloads/index.html

Inoltre c'è un post sul blog sull'NDK:
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html


5
OK, quindi ora che ne dici di C # e .Net? -)
Avi,

4
Non riesco a vedere il supporto .net mai accaduto
vickirk il


2
Si prega di fare riferimento a questo link androidsnippets.wordpress.com/2012/08/30/...
KK_07k11A0585

2
per il codice .net / c # e Android controlla xamarin
bbqchickenrobot

41

Il NDK Android è un set di strumenti che consente di implementare parti della vostra applicazione in codice nativo, utilizzando linguaggi come C e C ++. Per alcuni tipi di app, questo può aiutarti a riutilizzare le librerie di codici scritte in quelle lingue.

Per maggiori informazioni su come iniziare con lo sviluppo nativo, segui questo link .

Le applicazioni di esempio sono disponibili qui .


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

19

Normalmente, devi:

  1. Installa Google Android NDK. Contiene librerie, intestazioni, esempi di makfile e toolchain gcc
  2. Costruisci un eseguibile dal tuo codice C per ARM, ottimizzalo e collegalo con le librerie fornite, se necessario
  3. Connettiti a un telefono utilizzando l'interfaccia adb fornita e testa il tuo eseguibile

Se stai cercando di vendere un'app:

  1. Costruisci una libreria dal tuo codice C.
  2. Crea un semplice codice Java che utilizzerà questa libreria
  3. Incorporare questa libreria nel file del pacchetto dell'applicazione
  4. Metti alla prova la tua app
  5. Vendilo o distribuiscilo gratuitamente

sono un nuovo NDK e voglio eseguire C lan in Android. hai qualche link di riferimento?
Parag Chauhan,

14

Google ha rilasciato un kit di sviluppo nativo (NDK) (secondo http://www.youtube.com/watch?v=Z5whfaLH1-E alle 00:07:30).

Si spera che le informazioni vengano aggiornate sulla pagina dei gruppi di google ( http://groups.google.com/group/android-ndk ), in quanto si dice che non è stato ancora rilasciato.

Non sono sicuro di dove scaricare un semplice download, ma ho sentito che puoi ottenere una copia dell'NDK dal repository Git di Google sotto il ramo di ciambella.


12

La posizione ufficiale sembra essere che questo non è qualcosa che vorresti "voler fare". Vedi questa discussione nell'elenco degli sviluppatori Android. Google prevede Android in esecuzione su una varietà di dispositivi diversi (CPU, display, ecc.). Il modo migliore per consentire lo sviluppo è quindi utilizzare il codice gestito (portatile) destinato alla VM Dalvik. Per questo motivo, l'SDK di Android non supporta C / C ++.

MA, dai un'occhiata a questa pagina :

Android include un set di librerie C / C ++ utilizzate da vari componenti del sistema Android. Queste funzionalità sono esposte agli sviluppatori attraverso il framework delle applicazioni Android.

Il framework dell'applicazione gestita sembra essere sovrapposto a queste librerie. La pagina continua con l'elenco delle librerie C / C ++: libreria C standard, media, 3D, SQL Lite e altre.

Quindi tutto ciò che serve è una catena di compilatori che compilerà C / C ++ nella CPU appropriata (ARM, nel caso di G1). Alcune brevi istruzioni su come eseguire questa operazione sono qui .

Quello che non so è dove trovare le descrizioni delle API fornite da queste librerie. Immagino che potrebbero esserci dei file di intestazione sepolti nell'SDK da qualche parte, ma la documentazione potrebbe essere imprecisa / mancante. Ma penso che si possa fare!

Spero sia utile. Per la cronaca, non ho scritto nessuna app Android nativa, solo alcune semplici gestite.

Andy


4
Downvoting. L'NDK sembra essere un compilatore ufficiale per il codice nativo Android ora. Rendere questa risposta obsoleta.
unixman83,

8

È possibile utilizzare nestedvm per tradurre C (o altri linguaggi GCC) in bytecode Java e utilizzarlo come base della propria porta. Ad esempio, vedi la porta Android della raccolta di puzzle portatile Simon Tathams .

Mi aspetto che questo metodo sia reso obsoleto dall'NDK, ma potrebbe non esserci se alcune reti o qualcosa non consentono alle persone di aggiornare i propri telefoni.


1
+1 per un'alternativa all'NDK, anche se l'NDK lo rende obsoleto.
tobsen,

Nestedvm non è compatibile con più dispositivi?
Charo,

8

Google ha già lanciato Google I / O 2011: portare giochi C e C ++ alla sessione Android , disponibile all'indirizzo http://www.youtube.com/watch?v=5yorhsSPFG4

che è buono per capire l'uso di NDK per scrivere l'applicazione in c e c ++ per Android.

Se vuoi solo compilare tutti i giochi nativi basati su console ed eseguirli su Android, questo articolo ha mostrato 3 metodi per lo stesso.

1: compilazione statica utilizzando toolchain standalone

2: Compilazione incrociata utilizzando la toolchain di Android NDK

3: Compilazione incrociata utilizzando il codice sorgente AOSP


7

Forse lo stai cercando?

http://www.mosync.com/

È uno strato intermedio per lo sviluppo di diverse piattaforme mobili che utilizzano c ++.


2
il link è 404 non trovato. È sempre una buona idea inserire nella risposta un contenuto del post originale nel caso in cui il proprietario del sito vinca la lotteria, divorziasca dalla moglie e si trasferisca alle Bahamas.
Zuzlx,

7

Guardando questo sembra che sia possibile:

"il fatto che sia supportato solo il linguaggio Java non significa che non è possibile sviluppare applicazioni in altre lingue. Lo hanno dimostrato molti sviluppatori, hacker ed esperti nello sviluppo di applicazioni per dispositivi mobili. I ragazzi di Elements Interactive BV, la società dietro Edgelib libreria, è riuscito a eseguire applicazioni C ++ native sulla piattaforma Android, anche se in questo momento ci sono ancora molti problemi di visualizzazione e suono ... ecc. Questo include il gioco S-Tris2 e una demo di animazione 3D di Edgelib. "







2

Non conosco un tutorial ma un buon strumento di sviluppo: Airplay SDK di Ideaworks Labs. (Recentemente rinominato " Marmelade ") Usando C / C ++ puoi creare app per Windows Mobile, iPhone, Android. L'unico componente che non mi è piaciuto è stato il compositore della GUI: un bug con errori, ma puoi sempre sostituirlo con il Blocco note.


2

Puoi scaricare c4droid e quindi installare il plug-in GCC e installarlo sulla tua SD. Dalla shell ho appena attraversato la directory in cui si trova il binario GCC e quindi lo chiamo per creare un eseguibile a bordo.

trova / -name gcc

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

cat> test.c

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

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

./test

ciao braccio!



2

I file nativi C / c ++ libstdc ++. * Dal tuo Ubuntu sono binari x86 (o x86_64) ma i dispositivi Android e gli emulatori sono ARM. Ovviamente, questo non funzionerà comunque, anche se imposterai il soname corretto. Questo è un modo molto ingenuo che non porta da nessuna parte. Android ha un supporto molto limitato di C ++, il che significa che non ci sono eccezioni, libreria C ++ standard (incluso STL) e RTTI. Se hai bisogno di tale funzionalità, usa la mia distribuzione NDK personalizzata da

http://crystax.net/android/ndk.php - supporta le funzionalità C ++ complete elencate sopra.

Perché è presente un errore: riferimento indefinito all'errore di collegamento "__cxa_end_cleanup". Stlport Android

tempo. Perché non esiste alcun collegamento a libstdc + +. A. Così sbagliato.

Poiché utilizza una libreria statica, è necessario collegare l'intero libstdc + +. Una lattina

http://crystax.net/android/ndk.php qui per scaricare il pacchetto

directory source \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi.

Android sul proprio supporto libstdc + + è limitato, deve essere collegato a un completo libstdc + +. A il lavoro.

Aggiungi file in Android.mk LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

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

E LOCAL_CPPFLAGS + =-lstdc + +-fexceptionspuò essere compilato


1

Esiste un piano per consentire le librerie C / C ++ nella prossima versione dell'SDK di Android (Codename Eclair?) Ad oggi, non è possibile tramite l'SDK Java di Android. Tuttavia, puoi prendere il progetto ENORME ENORME, girare le tue librerie e quindi eseguire il flashing del tuo dispositivo ... ma anche chiunque desideri utilizzare la tua libreria dovrà eseguire il flashing della tua build personalizzata.


-7

Risposta breve: non puoi.

@ Backslash17: guardando l'articolo e il seguente link con le istruzioni di installazione, tutta l'azienda ha funzionato è lanciare un eseguibile autocompilato sull'emulatore, bypassando il framework Android. Una volta che hai l'emulatore puoi telnet e avere una shell Linux. L'esecuzione di un programma Linux è ovviamente banale. Ma questo non funziona per i telefoni senza jailbreak (noto anche come accesso root) e non disponibili sul mercato.

A meno che Google non apra altre opportunità o qualcuno scriva un compilatore personalizzato che compila Lingua X nel bytecode Dalvik (Dalvik è la VM che esegue i programmi Android) non sarai in grado di scrivere codice nativo.


Bene, ecco perché ho scritto "Sembra ...". Vedere per credere!
backslash17
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.