Gibt es Erfahrungen mit Android NDK?
-
18-09-2019 - |
Frage
Mich interessiert insbesondere, wie portabel es zwischen verschiedenen Telefonen ist.Wir haben eine Anwendung mit rechenintensivem Code, den wir gerne zwischen Android und iPhone teilen möchten.Wenn wir es in C schreiben könnten, hätten wir eine einzige Codebasis, aber wenn das NDK nur eine Teilmenge der Prozessoren unterstützt, die Telefonhersteller entwickeln, oder wenn wir für jeden Prozessor neu kompilieren müssten, wäre das keine praktikable Lösung .
Vielen Dank für alle Erfahrungen damit.
Lösung
Zum Thema, ob alle Android (Version 1.5+) Telefone werden die Ausgabe des aktuellen NDK unterstützt:
Alles, was ich sagen kann, ist, es gibt nichts in der Dokumentation nichts anderes vorzuschlagen (es sei denn vielleicht, wenn Sie lesen, eine Implikation in „ dieses Release unterstützt die ARMv5TE Befehlssatz“), und ich folge Android Nachrichten ziemlich eng und nicht von irgendwelchen Android-Handys gehört, freigegeben wird, um eine nicht-ARM-Architektur (obwohl gehackt einige Leute zusammen ein Build für EeePC ). Mit Blick auf die Android Quelle , gibt es Spuren von nur einer anderen Plattform, x86. Was die Zukunftspläne von Google und die OHA ? Sie müßten sie fragen. Sie kündigten vor kurzem einige Entwickler Tage , aber wahrscheinlich alle Flecken sind nun weg (das erste heute ist). Ich registrierte ziemlich früh für den London Tag (17) dann, wenn ich in Ich werde versuchen, dort eine Antwort zu bekommen (ich bin daran interessiert, definitiv zu wissen).
Andere Tipps
Ich bin nicht sehr vertraut w / Iphone Entwicklung, aber wenn man sich auf die
Das NDK ist im Grunde eine Implementierung des Native Java-Schnittstelle für Android.Sie erhalten GCC 4.2.1 (soweit ich das beurteilen kann, den vollständigen Satz an Tools) mit Ziel libpuzzles.so:ELF 32-Bit LSB Shared Object, ARM, Version 1 (SYSV), dynamisch verknüpft, nicht entfernt ( Verwendung integrierter Spezifikationen. 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 Thread-Modell:einzel gcc-Version 4.2.1 Vorausgesetzt, der Code wird ausgeführt, ist die Verwaltung auf API-Ebene ein separates und interessantes Thema.Mit 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, daher würde ich vermuten, dass es sich eher um eine standardmäßige dynamische Verknüpfung handelt oder arm-eabi
.Ob der resultierende Code auf einem iPhone oder anderen Geräten laufen würde, weiß ich nicht;Ich habe noch nie für das iPhone programmiert.Hier ist was file
Ich muss etwas zu etwas sagen, das ich mit dem NDK erstellt habe. Vielleicht können Sie Folgendes vergleichen:
strip
ist enthalten;Ich habe es hier einfach nicht ausgeführt.) Hier ist gcc -v
oder g++ -v
(sie sind identisch):
_
64-unknown-linux-gnu --build=x86_
64-unknown-linux-gnu --enable-sprachen=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-,dlopen()
?Was ich meine ist, Sie müssten entweder Ihre JNI-Funktionen (z. B. Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...)
damit zurechtkommen, von etwas aufgerufen zu werden, das keine JVM ist (hat Ihr iPhone-Code zum Beispiel eine JNI_Env vorgetäuscht?), oder, noch viel weniger schrecklich, beginnen Sie mit der Bereitstellung einer nativen API, die für das iPhone geeignet ist, und fügen Sie dann einen JNI-Wrapper ein, der kein JNI ist Plattformen können getrost ignorieren, was meiner Meinung nach ein gängiger Ansatz für solche Dinge ist.Hoffentlich hilft das.
Ich habe eine schöne Erfahrung zu schreiben Quer Brot JNI / C-App mit Framebuffer-Verarbeitung in NDK hatte und Rendering in JAVA.
Pitty, seine eine Android-only Lösung