¿Alguna experiencia con Android NDK?

Estoy específicamente interesado en lo portátil que es entre varios teléfonos. Tenemos una aplicación con algún código pesado de cómputo que nos gustaría compartir entre Android y iPhone. Si pudiéramos escribirlo en C, tendríamos una sola base de código, pero si el NDK sólo soporta un subconjunto de los procesadores que los fabricantes de teléfonos están creando, o si tenemos que recompilar para cada procesador, eso no es una solución viable .

Gracias por cualquier experiencia con ella.

En cuanto a si todos los teléfonos Android (versión 1.5+) soportarán la salida del NDK actual:

Todo lo que puedo decir es que no hay nada en la documentación que sugiera lo contrario (a menos que tal vez si se lee una implicación en " esta versión admite el conjunto de instrucciones ARMv5TE"), y sigo las noticias de Android bastante de cerca y no he oído hablar de ningún teléfono Android Lanzado usando una arquitectura no ARM (aunque algunas personas hackearon juntos una compilación para EeePC ). En cuanto a la fuente de Android , hay rastros de una sola plataforma, x86. En cuanto a los planes futuros de Google y la OHA ? Tendrías que preguntarles. Han anunciado recientemente algunos días de desarrollo , pero probablemente todos los puntos se han ido ahora (el primero es hoy). Me registré bastante temprano para el día de Londres (17) así que si consigo intentaré conseguir una respuesta allí (soy afilado saber definitivamente también).

No estoy muy familiarizado con el desarrollo de Iphone, pero si miras en la página android ndk , en la sección de herramientas de desarrollo, se enumeran los encabezados garantizados disponibles en la plataforma, por lo que si el iphone admite estas funciones, o puede crear interfaces entre Su código y las bibliotecas nativas en ambas plataformas que no veo por qué no funcionaría.

El NDK es básicamente una implementación de Java Native Interface para Android. Le da GCC 4.2.1 (el conjunto completo de herramientas en la medida de lo que puedo decir) con arm-eabi objetivo. Si el código resultante se ejecuta en un iPhone u otros dispositivos que no sé; Nunca he codificado para el iPhone. Aquí está lo que el file tiene que decir acerca de algo que construí con el NDK por lo que tal vez se puede comparar:

Libpuzzles.so: Objeto compartido LSB de 32 bits LSB, ARM, versión 1 (SYSV), enlazado dinámicamente, no despojado

(La strip está incluida, no la he ejecutado aquí). Aquí hay gcc -v o g++ -v (son idénticos):

Uso de especificaciones incorporadas.

Objetivo: brazo-eabi

Configurado 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 / brazo-eabi-4.2.1 –target = brazo-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 = suave –with-fpu = vfp –with-arch = armv5te –enable-target-optspace –with-abi = aapcs –disable-nls –prefix = / -config / android / git / android-ndk / build / prebuilt / linux-x86 / arm-eabi-4.2.1 –with-sysroot = / opt / Cupcake / arch-arm –program-transform-name = s, ^, arm-eabi-,

Modelo de rosca: simple

Gcc versión 4.2.1

Suponiendo que se ejecute el código, administrarlo a nivel API es un problema independiente e interesante. Android sólo le permitirá llamar al código nativo a través de la API JNI. No estoy familiarizado con el enfoque de iPhone, pero sé que no es Java, así que supongo que es más como dinámica estándar de vinculación o dlopen() ? Lo que quiero decir es que tendrías que hacer tus funciones JNI (por ejemplo, Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...) hacer frente a ser llamado desde algo que no es una JVM (¿tiene tu código de iPhone falsa un JNI_Env por ejemplo? ) O, mucho menos horriblemente, empezar por proporcionar una API nativa adecuada para el iPhone y luego incluir un envoltorio JNI, que las plataformas no JNI puede ignorar con seguridad, lo que creo es un enfoque común para este tipo de cosas.

He tenido una experiencia agradable que escribe la aplicación del JNI / C del pan cruzado con el procesamiento del framebuffer en NDK y la representación en JAVA.

Pitty, es una solución sólo para Android

  • Cómo vincular cualquier biblioteca en la aplicación ndk
  • C ++ 11 std :: async en Android NDK no funciona
  • Android JNI ¿Cuál es el directorio de trabajo actual para C / C ++ ejecutado código?
  • DllNotFoundException en la aplicación de Android de NDK usando Xamarin
  • Vinculación con la biblioteca compartida versionada en Android NDK
  • Decodificación de vídeo acelerado por hardware para H.264 en android antes de Jelly Bean
  • Cómo utilizar el archivo .so para crear un archivo .apk en la aplicación android para mi códec de vídeo personalizado
  • Android NDK: ADVERTENCIA: APP_PLATFORM android-9 es más grande que android: minSdkVersion 8
  • Cómo solucionar el problema de las llamadas de la biblioteca NDK que congela el subproceso de la interfaz de usuario
  • ¿Podemos acceder al controlador de micrófono de mi teléfono Android
  • Uso de FFmpeg con Android-NDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.