Pregunta

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

Gracias por cualquier experiencia con él.

¿Fue útil?

Solución

Sobre el tema de si todos los Android (versión 1.5 +) móviles apoyarán la salida de la corriente NDK:

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 soporta el conjunto de instrucciones ARMv5TE"), y sigo las noticias Android bastante de cerca y no han oído hablar de los teléfonos Android de ser liberado mediante una arquitectura ARM no (aunque algunas personas hackeado una acumulación de EeePC ). En cuanto a la Android fuente , hay rastros de una sola otra plataforma, x86. En cuanto a los futuros planes de Google y la OHA ? Habría que preguntarles a ellos. Se ha anunciado recientemente algunos días desarrollador , pero probablemente todos los puntos se han ido (el primero es en la actualidad). Me he registrado muy temprano para el día Londres (17a) por lo que si me meto en Voy a tratar de obtener una respuesta allí (estoy interesado en saber definitivamente también).

Otros consejos

No soy muy familiar w / Iphone desarrollo, pero si nos fijamos en la androide página NDK , en la sección de herramientas de desarrollo, enumera los encabezados garantizados disponibles en la plataforma, por lo que si el iPhone es compatible con estas funciones, o puede crear interfaces entre el código y las bibliotecas nativas en ambas plataformas que no veo por qué no iba a funcionar.

El NDK es básicamente una implementación del Interfaz nativa de Java para Android.Te proporciona GCC 4.2.1 (el conjunto completo de herramientas hasta donde yo sé) con target arm-eabi.No sé si el código resultante se ejecutará en un iPhone u otros dispositivos;Nunca he codificado para el iPhone.Esto es lo que file tiene que decir sobre algo que construí con el NDK, así que quizás puedas comparar:

libpuzzles.so:Objeto compartido ELF LSB de 32 bits, ARM, versión 1 (SYSV), vinculado dinámicamente, no eliminado

(strip está incluido;Simplemente no lo he ejecutado aquí.) Aquí está gcc -v o g++ -v (son idénticos):

Usando especificaciones integradas.

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/arm-eabi-4.2.1 --target=arm-eabi --host=x86_64-linux-gnu-desconocido --build=x86_64-unknown-linux-gnu --enable-languages=c,c++ --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 -- desactivar-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-,

Modelo de hilo:soltero

gcc versión 4.2.1

Suponiendo que el código se ejecutará, gestionarlo a nivel de API es un tema aparte e interesante.Android solo te permitirá llamar al código nativo a través de la API JNI.No estoy familiarizado con el enfoque del iPhone, pero sé que no es Java, así que supongo que es más como un enlace dinámico estándar o dlopen()?Lo que quiero decir es que tendrías que realizar tus funciones JNI (p. ej. Java_com_example_Foo_YourMethod(JNI_Env*, jobject, ...) lidiar con una llamada desde algo que no es una JVM (¿el código de su iPhone es falso como JNI_Env, por ejemplo?) o, mucho menos horrible, comenzar proporcionando una API nativa adecuada para iPhone y luego incluir un contenedor JNI, que no sea JNI. las plataformas pueden ignorar con seguridad, lo que entiendo es un enfoque común para este tipo de cosas.Espero que ayude.

He tenido una buena experiencia escribiendo cruzada pan aplicación JNI / C con el procesamiento de uso de este dispositivo en NDK y que hacían en JAVA.

Pitty, su una solución androide de sólo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top