Domanda

Sono particolarmente interessato a quanto sia portatile tra diversi telefoni.Abbiamo un'applicazione con del codice pesante di calcolo che vorremmo condividere tra Android e iPhone.Se potessimo scriverlo in C, avremmo un'unica base di codice, ma se l'NDK supporta solo un sottoinsieme dei processori creati dai produttori di telefoni, o se dobbiamo ricompilare per ciascun processore, non è una soluzione praticabile. .

Grazie per eventuali esperienze con esso.

È stato utile?

Soluzione

A proposito di se tutti Android (versione 1.5 +) i telefoni supporteranno l'uscita della corrente NDK:

Tutto quello che posso dire è non c'è niente nella documentazione di suggerire altrimenti (se non forse se si legge un implicazione in " questo rilascio supporta il set di istruzioni ARMv5TE"), e seguo le notizie Android abbastanza da vicino e non hanno sentito parlare di eventuali telefoni Android di essere rilasciato utilizzando un'architettura non-ARM (anche se alcune persone messo insieme una build per EeePC ). Guardando il Android fonte , ci sono tracce di una sola altra piattaforma, x86. Per quanto riguarda i progetti futuri di Google e OHA ? Dovreste chiedere loro. Hanno recentemente annunciato alcune giorni sviluppatori , ma probabilmente tutti i punti sono andati oggi (il primo è oggi). Mi sono registrato abbastanza presto per il giorno di Londra (17 °), quindi se ricevo in cercherò di ottenere una risposta lì (io sono ansioso di sapere definitivamente troppo).

Altri suggerimenti

Io non sono molto familiare w / sviluppo Iphone, ma se si guarda sul Android NDK pagina , nella sezione strumenti di sviluppo, elenca le intestazioni garantiti disponibili nella piattaforma, per cui se l'iPhone supporta tali funzioni, oppure è possibile creare interfacce tra il codice e le librerie native su entrambe le piattaforme di non vedo il motivo per cui non avrebbe funzionato.

L'NDK è fondamentalmente un'implementazione del Interfaccia nativa Java per Android.Ti dà GCC 4.2.1 (il set completo di strumenti per quanto ne so) con target arm-eabi.Non so se il codice risultante funzionerebbe su un iPhone o altri dispositivi;Non ho mai programmato per l'iPhone.Ecco cosa file ha da dire su qualcosa che ho creato con l'NDK quindi forse puoi confrontare:

libpuzzles.so:Oggetto condiviso LSB a 32 bit ELF, ARM, versione 1 (SYSV), collegato dinamicamente, non rimosso

(strip è incluso;Semplicemente non l'ho eseguito qui.) Ecco gcc -v O g++ -v (sono identici):

Utilizzo delle specifiche integrate.

Bersaglio:arm-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-linguals=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 /build/platforms/cupcake/arch-arm --program-transform-name=s,^,arm-eabi-,

Modello di filettatura:separare

versione gcc 4.2.1

Supponendo che il codice venga eseguito, gestirlo a livello API è una questione separata e interessante.Android ti consentirà di chiamare solo codice nativo tramite l'API JNI.Non ho familiarità con l'approccio dell'iPhone, ma so che non è Java, quindi immagino che sia più simile al collegamento dinamico standard o dlopen()?Ciò che intendo è che dovresti rendere le tue funzioni JNI (ad es. Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...) affrontare l'essere chiamati da qualcosa che non è una JVM (ad esempio, il codice del tuo iPhone falsifica un JNI_Env?) o, in modo molto meno orribile, inizia fornendo un'API nativa adatta per iPhone e quindi includi un wrapper JNI, che non-JNI le piattaforme possono tranquillamente ignorare, il che, secondo me, è un approccio comune per questo genere di cose.Spero che aiuti.

Ho avuto una bella esperienza di scrittura cross-pane app JNI / C con l'elaborazione framebuffer in NDK e il rendering in JAVA.

Pitty, la sua una soluzione Android-only

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top