¿Cómo saber a qué arquitectura está destinado un APK?

9

Estoy escribiendo un script para probar una gran cantidad de apks. Algunos corren en x86 y otros corren en el brazo. ¿Hay alguna manera de saber qué aplicaciones están destinadas a qué arquitectura?

He revisado el informe sobre las insignias de aapt con aapt dump badging application.apk. Veo algunas de las versiones compatibles con el brazo, native-code: 'armeabi-v7a'pero no todas, y no veo ninguna indicación de en qué arquitectura se ejecutan las aplicaciones compatibles con x86.

También he intentado usar apktool para separar el apk y examinar AndroidManifest.xml. Tampoco veo nada relacionado con la arquitectura del chip.

¿Algunas ideas?

MikeSchem
fuente

Respuestas:

17

Una forma (bastante cruda) de ver para qué arquitectura están construidas las bibliotecas nativas de APK es descomprimirlo (es solo un archivo zip) y echar un vistazo a la carpeta libs; si la aplicación contiene bibliotecas nativas, se dividirán en las siguientes subcarpetas dentro (con las bibliotecas compiladas dentro de estas):

Consulte el Paquete de aplicaciones de Android para obtener más información sobre la estructura de un APK y la fuente de la lista anterior. Se puede encontrar una lista más completa (incluida MIPS64), junto con información sobre cosas específicas de la arquitectura, en una versión archivada de la página de Administración de ABI para Desarrolladores de Android , capturada el 18 de abril de 2016.

Curiosamente, apuntar a un solo ABI (donde una aplicación incluye bibliotecas nativas diseñadas para una arquitectura) no necesariamente significa que la aplicación no se ejecutará en dispositivos que usan otras arquitecturas. ARMv8-a, por ejemplo, es retrocompatible con ARM y ARMv7-a, y los dispositivos Android x86 de Intel contienen una capa de traducción patentada que permite que el código ARM se ejecute en dispositivos x86 (permitiendo que las aplicaciones ARM solo se ejecuten en plataformas x86). Una lista de los ABIs que un dispositivo Android puede ejecutar se puede encontrar en la ro.product.cpu.abilistpropiedad, que puede alcanzarse en una cáscara (por ejemplo a través de una aplicación de terminal en el dispositivo, o sobre adb usando adb shell) utilizando el getpropcomando: getprop ro.product.cpu.abilist.

Joe
fuente