¿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.
- Cómo compilar la biblioteca nativa de Android con Android Studio?
- ¿Cómo configurar ANDROID_NDK_HOME para que Android Studio no solicite la ubicación de ndk?
- Cómo establecer la variable de acuerdo con los sabores gradle
- Render el texto en la aplicación puramente nativa de Android
- Gradle NDK para especificar una directiva 'include' en Android.mk generado
- ¿Qué compilador utiliza Android NDK?
- Falta biblioteca para glShaderModel en mi programa nativo de C ++ para Android
- JNI Android - Convertir char * en matriz de bytes y devolverlo a java
- Gradle no empaqueta gdbserver en apk. Ndk-gdb da como resultado "ERROR: aplicación no depurable instalada en el dispositivo de destino"
- Depuración del código Android NDK C / C ++ en Eclipse: los puntos de interrupción no se alcanzan
- Android Fatal señal 11 (SIGSEGV) en 0x636f7d89 (código = 1). ¿Cómo se puede localizar?
- Android carga la biblioteca nativa
- Android cmake es compatible con las nuevas versiones de NDK?
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
- Daga con Android: ¿Cómo inyectar el contexto cuando se utiliza MVP?
- Navegación anterior separada para un buscador de vistas con pestañas en Android