¿Cómo apuntar a múltiples arquitecturas usando NDK?
Fondo
Recientemente he comenzado a desarrollar código usando NDK, y he pensado en un posible problema de portabilidad que podría ocurrir mientras se desarrolla usando NDK.
El problema
Dado que NDK usa código nativo, necesita ser compilado por arquitectura de CPU. Esto es un problema ya que el usuario necesita ejecutar la aplicación sin importar la CPU que tenga el dispositivo.
Posibles soluciones que he encontrado hasta ahora
He notado que puedo modificar el archivo " jni / Application.mk" y uso:
APP_ABI: = armeabi armeabi-v7a x86
Sin embargo, no se que debo hacer a partir de este paso. ¿La aplicación contendrá todo el código compilado para cada una de las arquitecturas de CPU y elegirá automáticamente la correcta cuando se ejecute ella misma?
Además, ¿qué pasa si habrá otra arquitectura de CPU que sea desconocida?
¿Qué pasará si intento ejecutar la aplicación en Google TV, que según lo que recuerdo no es compatible con el NDK en todos?
Otra solución que he encontrado es el soporte multi-apk. Sin embargo, no estoy seguro de entenderlo. ¿Todo esto significa que creas el mismo APK, cada vez con una configuración diferente? ¿No hay ninguna herramienta de automatización especial de ADT para ayudar con eso?
2 answers
Si no configura APP_ABI
en absoluto, o use
APP_ABI := all
En su Application.mk , luego ndk-build se compila para todas las arquitecturas soportadas por su versión de NDK. El último, hasta la fecha r8d, además de armeabi armeabi-v7a x86
se construirá también para mips
. Cuando se lance otra arquitectura, con suerte obtendrá automáticamente el APK construido para soportarlo.
Cuando la aplicación está instalada en un dispositivo Android, el sistema elegirá automáticamente el ABI correspondiente versión e instalar las bibliotecas compartidas correctas desde el APK.
Un inconveniente de este enfoque es que si las bibliotecas nativas son grandes, su archivo APK "monolítico" puede volverse enorme. Puede usar el enfoque multi-APK para reducir las descargas de los usuarios. El sitio oficial de recomienda: Generalmente debes usar varios APK para admitir diferentes configuraciones de dispositivos solo cuando tu APK sea demasiado grande (mayor de 50 MB). Debe seguir cuidadosamente el código de la versión líneas de gremio si eliges esta ruta.
Desafortunadamente, no hay profecías confiables con respecto al soporte de NDK en Google TV, pero parece que no hay justificación técnica para su falta de disponibilidad actual. Si y cuando llegue, su ndk-build se encargará de ello automáticamente.
ACTUALIZAR Aquí es un proceso simple para mantener split APK. Y por cierto, el nuevo Android TV es compatible con NDK.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:11
Para la última versión (ahora r9) debe especificar en "jni/Application.mk"
APP_ABI := all
O
APP_ABI := armeabi armeabi-v7a x86 mips
Sin ./ ndk_build solo construirá 'armeabi'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-14 10:06:27