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
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.
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).
Ich bin nicht sehr vertraut mit Iphone Entwicklung, aber wenn Sie auf der android ndk Seite
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.
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).
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.
Ich bin nicht sehr vertraut mit Iphone Entwicklung, aber wenn Sie auf der android ndk Seite
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.
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
Tags und Links android android-ndk