L'NDK è fondamentalmente un'implementazione di Java Native Interface per Android. Ti dà GCC 4.2.1 (il set completo di strumenti per quanto posso dire) con l'obiettivo arm-eabi
. Se il codice risultante sarebbe eseguito su un iPhone o altri dispositivi che non conosco; Non ho mai programmato per l'iPhone. Ecco cosa file
ha da dire su qualcosa che ho costruito con l'NDK in modo forse si può confrontare:
libpuzzles.so: ELF a 32 bit LSB oggetto condiviso, ARM, versione 1 (SYSV), collegato dinamicamente, non spogliato
(. strip
è incluso; io non ho eseguito qui) Ecco gcc -v
o g++ -v
(sono identiche):
Utilizzando specifiche incorporate.
cliente: il braccio eabi
Configurato con: /opt/digit/android/git/android-ndk/out/arm-eabi-4.2.1/toolchain/src/gcc-4.2.1/configure --prefix =/opt/digit/android/git/android-ndk/build/prebuilt/linux-x86/arm-eabi-4.2.1 --target = arm-eabi --host = x86 _
64-unknown-linux -gnu --build = x86 _
64-unknown-linux-gnu --enable-languages = c, C++ --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp - -disable-libstdc __- v3 --disable-sjlj-exceptions --disable-shared --with-float = soft --with-fpu = vfp --with-arch = armv5te --enable-target-optspace --with- abi = aapcs --disable-nls --prefix =/opt/digit/android/git/android-ndk/build/prebuilt/linux-x86/arm-eabi-4.2.1 --with-sysroot =/opt/digit/android/git/android-NDK/bu ild/piattaforme/bigné/arch-braccio --program-transform-name = s, ^, braccio-eabi-,
modello Discussione: single
gcc version 4.2.1
Assumendo il codice verrà eseguito, gestendo questo a livello di API è un problema separato e interessante. Android ti consente di chiamare il codice nativo solo tramite l'API JNI. Non ho familiarità con l'approccio dell'iPhone, ma so che non è Java, quindi suppongo che sia più simile al collegamento dinamico standard o allo dlopen()
? Quello che voglio dire è che dovresti o fare le tue funzioni JNI (ad esempio, Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...)
far fronte all'essere chiamato da qualcosa che non è una JVM (avere il tuo codice iPhone falso un JNI_Env per esempio?) O, molto meno orribilmente, iniziare fornendo un'API nativa adatta per iPhone e quindi include un wrapper JNI, che le piattaforme non-JNI possono tranquillamente ignorare, che raccolgo è un approccio comune per questo genere di cose .Spero che aiuti.
fonte
2009-11-08 12:12:49
Per chiarire, non mi interessa il lato iPhone dell'equazione. So che dovrò compilarlo separatamente per l'iPhone (usa librerie statiche, non dinamiche). Sono preoccupato che se creo un .so per l'Android, sarà compatibile solo con quel sottoinsieme dei telefoni Android che supportano l'arm-eabi. Forse sto mostrando la mia ignoranza dell'hardware qui, ma se tutti i telefoni Android devono rispettare lo standard, non ci sono problemi. – john146
> Abbiamo un'applicazione con un codice pesante di calcolo che vorremmo condividere tra Android e iPhone. iPhone (a partire da iOS 4.2) non supporta oggetti condivisi creati dall'utente –