8 Stimmen

Haben Sie Erfahrung mit Android NDK?

Mich interessiert vor allem, wie portabel es zwischen verschiedenen Telefonen ist. Wir haben eine Anwendung mit einigen rechenintensiven Code, den wir zwischen Android und iPhone teilen möchten. Wenn wir es in C schreiben könnten, hätten wir eine einzige Code-Basis, aber wenn das NDK nur eine Teilmenge der Prozessoren unterstützt, die Telefonhersteller erstellen, oder wenn wir für jeden Prozessor neu kompilieren müssen, ist das keine praktikable Lösung.

Danke für alle Erfahrungen damit.

2voto

broschb Punkte 4968

Ich bin nicht sehr vertraut mit der Iphone-Entwicklung, aber wenn Sie sich die Android ndk-Seite Wenn das iPhone diese Funktionen unterstützt oder Sie Schnittstellen zwischen Ihrem Code und den nativen Bibliotheken auf beiden Plattformen erstellen können, sehe ich nicht, warum es nicht funktionieren sollte.

2voto

Chris Boyle Punkte 11316

Das NDK ist im Grunde eine Implementierung des Native Java-Schnittstelle für Android. Es gibt Ihnen GCC 4.2.1 (der vollständige Satz von Werkzeugen, soweit ich sagen kann) mit Ziel arm-eabi . Ob der resultierende Code auf einem iPhone oder anderen Geräten laufen würde, weiß ich nicht; ich habe nie für das iPhone programmiert. Hier ist was file über etwas zu sagen hat, das ich mit dem NDK gebaut habe, damit Sie vielleicht vergleichen können:

libpuzzles.so: ELF 32-bit LSB shared object, ARM, Version 1 (SYSV), dynamisch gelinkt, nicht gestrippt

( strip ist enthalten; ich habe es hier nur nicht ausgeführt). Hier ist gcc -v o g++ -v (sie sind identisch):

Integrierte Spezifikationen verwenden.

Ziel: arm-eabi

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

Gewindemodell: einfach

gcc Version 4.2.1

Vorausgesetzt, der Code läuft, ist die Verwaltung auf API-Ebene ein separates und interessantes Thema. Bei Android können Sie nativen Code nur über die JNI-API aufrufen. Ich bin mit dem iPhone-Ansatz nicht vertraut, aber ich weiß, dass es sich nicht um Java handelt, also würde ich vermuten, dass es sich eher um Standard Dynamic Linking oder dlopen() ? Was ich meine ist, Sie müssten entweder Ihre JNI-Funktionen (z.B.. Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...) mit dem Aufruf von etwas, das keine JVM ist (haben Sie Ihr iPhone-Code fake eine JNI_Env zum Beispiel?) oder, viel weniger schrecklich, starten Sie durch die Bereitstellung einer nativen API geeignet für iPhone und dann eine JNI-Wrapper, die nicht-JNI-Plattformen sicher ignorieren können, die ich sammeln ist ein gemeinsamer Ansatz für diese Art von Dingen. Hoffentlich hilft das.

2voto

Chris Boyle Punkte 11316

Zu der Frage, ob alle Android-Handys (Version 1.5+) die Ausgabe des aktuellen NDK unterstützen werden:

Ich kann nur sagen, dass es in der Dokumentation nichts gibt, was auf etwas anderes hindeutet (außer vielleicht, wenn Sie eine Andeutung in " diese Freigabe unterstützt den ARMv5TE-Befehlssatz"), und ich verfolge die Android-Nachrichten ziemlich genau und habe noch von keinem Android-Handy gehört, das mit einer Nicht-ARM-Architektur auf den Markt kommt (obwohl einige Leute haben ein Build für den EeePC zusammengeschraubt ). Betrachtet man die Android-Quelle gibt es nur Spuren von einer anderen Plattform, nämlich x86. Was die Zukunftspläne von Google und dem OHA ? Das müssen Sie sie fragen. Sie kündigten kürzlich einige Entwicklertage aber wahrscheinlich sind jetzt alle Flecken weg (der erste ist heute). Ich habe mich ziemlich früh für den Londoner Tag (17.) angemeldet. Wenn ich also reinkomme, werde ich versuchen, dort eine Antwort zu bekommen (ich bin auch sehr daran interessiert, eine endgültige Antwort zu bekommen).

0voto

Ulterior Punkte 2564

Ich habe gute Erfahrungen mit dem Schreiben von Cross-Bread JNI/C-Anwendungen mit Framebuffer-Verarbeitung im NDK und Rendering in JAVA gemacht.

Schade, es ist eine reine Android-Lösung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X