¿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?

Author: android developer, 2013-01-20

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.

 29
Author: Alex Cohn,
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'

 5
Author: hannes ach,
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