Irgendeine Erfahrung mit Android NDK?

8

Ich bin speziell daran interessiert, wie tragbar es zwischen verschiedenen Telefonen ist. Wir haben eine Anwendung mit etwas schwerem Code, den wir 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 erstellen, oder wenn wir für jeden Prozessor neu kompilieren müssen, ist das keine praktikable Lösung .

Danke für alle Erfahrungen damit.

    
john146 06.11.2009, 22:02
quelle

4 Antworten

2

Zum Thema, ob alle Android (Version 1.5+) Telefone die Ausgabe des aktuellen NDK unterstützen:

Ich kann nur sagen, dass nichts in der Dokumentation etwas anderes vermuten lässt (außer vielleicht, wenn Sie eine Implikation in " diese Version unterstützt den ARMv5TE-Befehlssatz" lesen) und Android-Nachrichten ziemlich genau befolge und ich habe noch nicht gehört, dass Android-Telefone mit einer Nicht-ARM-Architektur veröffentlicht wurden (obwohl einige Leute haben einen Build für EeePC gehackt ). Betrachtet man die Android-Quelle , gibt es Spuren von nur einer anderen Plattform, x86. Wie für die Zukunftspläne von Google und der OHA ? Du müsstest sie fragen. Sie haben kürzlich einige Entwicklertage angekündigt, aber wahrscheinlich sind alle Spots weg jetzt (der erste ist heute). Ich habe mich ziemlich früh für den Londoner Tag (17) angemeldet, also werde ich versuchen, dort eine Antwort zu bekommen (ich bin auch daran interessiert, es genau zu wissen).

    
Chris Boyle 09.11.2009, 09:43
quelle
2

Das NDK ist im Grunde eine Implementierung der Java Native Schnittstelle für Android. Es gibt Ihnen GCC 4.2.1 (soweit ich das beurteilen kann) mit dem Ziel arm-eabi . Ob der resultierende Code auf einem iPhone oder anderen Geräten laufen würde, die ich nicht kenne; Ich habe nie für das iPhone codiert. 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-Objekt, ARM, Version 1 (SYSV), dynamisch verknüpft, nicht entfernt

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

  

Verwenden von integrierten 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 - Ziel = Arm-eabi - Host = x86 _ 64-unbekannt-Linux-gnu --build = x86 _ 64-unbekannt-linux-gnu --enable-languages ​​= c, c ++ --disable-libssp --openable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc __- v3 --disable-sjlj-Ausnahmen --disable-shared --with-float = weich --with-fpu = vfp --with-arch = armv5te --openable-target-optspace --with-abi = aapcs --deable -nls --prefix = / opt / digit / android / git / android-ndk / bauen / prebuilt / linux-x86 / arm-eabi-4.2.1 - mit-sysroot = / opt / digit / android / git / android -ndk / bauen / Plattformen / Cupcake / Bogen-Arm - Programm-Transform-Name = s, ^, Arm-eabi -,

     

Thread-Modell: single

     

gcc Version 4.2.1

Unter der Annahme, dass der Code ausgeführt wird, ist die Verwaltung auf API-Ebene ein separates und interessantes Problem. Mit Android können Sie nur nativen Code über die JNI-API aufrufen. Ich bin mit dem iPhone Ansatz nicht vertraut, aber ich weiß, dass es nicht Java ist, also würde ich denken, dass es mehr wie Standard dynamische Verknüpfung oder dlopen() ist? Was ich meine, ist, dass Sie entweder Ihre JNI-Funktionen machen müssen (zB Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...) mit dem Anruf von etwas, das keine JVM ist, umgehen) (lassen Sie Ihren iPhone-Code zum Beispiel ein JNI_Env fälschen?) Oder, viel weniger schrecklich, starten Sie durch die Bereitstellung einer nativen API, die für das iPhone geeignet ist und dann einen JNI-Wrapper enthält, den Nicht-JNI-Plattformen sicher ignorieren können, was ich als einen allgemeinen Ansatz für diese Art von Dingen erfahre. Hoffe, das hilft.

    
Chris Boyle 08.11.2009 12:12
quelle
0
___ qstnhdr ___ Irgendeine Erfahrung mit Android NDK? ___ answer1700017 ___

Zum Thema, ob alle Android (Version 1.5+) Telefone die Ausgabe des aktuellen NDK unterstützen:

Ich kann nur sagen, dass nichts in der Dokumentation etwas anderes vermuten lässt (außer vielleicht, wenn Sie eine Implikation in " diese Version unterstützt den ARMv5TE-Befehlssatz" lesen) und Android-Nachrichten ziemlich genau befolge und ich habe noch nicht gehört, dass Android-Telefone mit einer Nicht-ARM-Architektur veröffentlicht wurden (obwohl einige Leute haben einen Build für EeePC gehackt ). Betrachtet man die Android-Quelle , gibt es Spuren von nur einer anderen Plattform, x86. Wie für die Zukunftspläne von Google und der OHA ? Du müsstest sie fragen. Sie haben kürzlich einige Entwicklertage angekündigt, aber wahrscheinlich sind alle Spots weg jetzt (der erste ist heute). Ich habe mich ziemlich früh für den Londoner Tag (17) angemeldet, also werde ich versuchen, dort eine Antwort zu bekommen (ich bin auch daran interessiert, es genau zu wissen).

    
___ qstntxt ___

Ich bin speziell daran interessiert, wie tragbar es zwischen verschiedenen Telefonen ist. Wir haben eine Anwendung mit etwas schwerem Code, den wir 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 erstellen, oder wenn wir für jeden Prozessor neu kompilieren müssen, ist das keine praktikable Lösung .

Danke für alle Erfahrungen damit.

    
___ answer1691927 ___

Ich bin nicht sehr vertraut mit Iphone Entwicklung, aber wenn Sie auf der android ndk Seite Unter dem Abschnitt Entwicklungstools werden die garantierten Header aufgelistet, die in der Plattform verfügbar sind. 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 würde nicht funktionieren.

    
___ answer1696208 ___

Das NDK ist im Grunde eine Implementierung der Java Native Schnittstelle für Android. Es gibt Ihnen GCC 4.2.1 (soweit ich das beurteilen kann) mit dem Ziel %code% . Ob der resultierende Code auf einem iPhone oder anderen Geräten laufen würde, die ich nicht kenne; Ich habe nie für das iPhone codiert. Hier ist, was %code% ü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-Objekt, ARM, Version 1 (SYSV), dynamisch verknüpft, nicht entfernt

( %code% ist enthalten; ich habe es hier nicht ausgeführt.) Hier ist %code% oder %code% (sie sind identisch):

  

Verwenden von integrierten 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 - Ziel = Arm-eabi - Host = x86 %code% 64-unbekannt-Linux-gnu --build = x86 %code% 64-unbekannt-linux-gnu --enable-languages ​​= c, c ++ --disable-libssp --openable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc __- v3 --disable-sjlj-Ausnahmen --disable-shared --with-float = weich --with-fpu = vfp --with-arch = armv5te --openable-target-optspace --with-abi = aapcs --deable -nls --prefix = / opt / digit / android / git / android-ndk / bauen / prebuilt / linux-x86 / arm-eabi-4.2.1 - mit-sysroot = / opt / digit / android / git / android -ndk / bauen / Plattformen / Cupcake / Bogen-Arm - Programm-Transform-Name = s, ^, Arm-eabi -,

     

Thread-Modell: single

     

gcc Version 4.2.1

Unter der Annahme, dass der Code ausgeführt wird, ist die Verwaltung auf API-Ebene ein separates und interessantes Problem. Mit Android können Sie nur nativen Code über die JNI-API aufrufen. Ich bin mit dem iPhone Ansatz nicht vertraut, aber ich weiß, dass es nicht Java ist, also würde ich denken, dass es mehr wie Standard dynamische Verknüpfung oder %code% ist? Was ich meine, ist, dass Sie entweder Ihre JNI-Funktionen machen müssen (zB %code% mit dem Anruf von etwas, das keine JVM ist, umgehen) (lassen Sie Ihren iPhone-Code zum Beispiel ein JNI_Env fälschen?) Oder, viel weniger schrecklich, starten Sie durch die Bereitstellung einer nativen API, die für das iPhone geeignet ist und dann einen JNI-Wrapper enthält, den Nicht-JNI-Plattformen sicher ignorieren können, was ich als einen allgemeinen Ansatz für diese Art von Dingen erfahre. Hoffe, das hilft.

    
___ tag123androidndk ___ Das Android Native Development Kit (NDK) ist ein begleitendes Tool zum Android SDK, mit dem Sie performance-kritische Teile Ihrer Apps in nativem Code erstellen oder vorhandene Bibliotheken in C / C ++ auf Android portieren können. Es bietet Header und Bibliotheken, mit denen Sie Aktivitäten erstellen, Benutzereingaben verarbeiten, Hardwaresensoren verwenden, auf Anwendungsressourcen zugreifen und vieles mehr, wenn Sie in C / C ++ programmieren. ___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ antwort6612228 ___

Ich habe eine schöne Erfahrung beim Schreiben einer Cross-Brot-JNI / C-App mit Framebuffer-Verarbeitung in NDK und Rendern in JAVA gemacht.

Pitty, es ist eine Android-Lösung

    
___
Ulterior 07.07.2011 14:28
quelle

Tags und Links