Como saber para qual arquitetura um APK é destinado?

9

Estou escrevendo um script para testar uma grande quantidade de aplicativos. Alguns rodam no x86 e outros rodam no braço. Existe uma maneira de saber quais aplicativos são destinados a qual arquitetura?

Eu olhei através do relatório sobre aapt crachá com aapt dump badging application.apk. Para algumas das versões compatíveis com arm, eu vejo, native-code: 'armeabi-v7a'mas não para todas, e não vejo nenhuma indicação de qual arquitetura os aplicativos compatíveis com x86 executam.

Também tentei usar o apktool para separar o apk e examinar o AndroidManifest.xml. Também não vejo nada relacionado à arquitetura de chips.

Alguma ideia?

MikeSchem
fonte

Respostas:

17

Uma maneira (bastante grosseira) de ver para qual arquitetura as bibliotecas nativas de um APK são criadas é descompactá-lo (é apenas um arquivo zip) e dar uma olhada na pasta libs - se o aplicativo contiver bibliotecas nativas, elas serão divididas em as seguintes subpastas internas (com as bibliotecas compiladas dentro delas):

Consulte Pacote de aplicativos Android para obter mais informações sobre a estrutura de um APK e a fonte da lista acima. Uma lista mais completa (incluindo MIPS64), juntamente com algumas informações sobre itens específicos da arquitetura, pode ser encontrada em uma versão arquivada da página Android Developer ABI Management , capturada em 18 de abril de 2016.

Curiosamente, segmentar uma única ABI (onde um aplicativo inclui bibliotecas nativas projetadas para uma arquitetura) não significa necessariamente que o aplicativo não será executado em dispositivos que usam outras arquiteturas. O ARMv8-a, por exemplo, é compatível com o ARM e o ARMv7-a, e os dispositivos Android x86 da Intel contêm uma camada de conversão proprietária que permite que o código ARM seja executado em dispositivos x86 (permitindo que aplicativos apenas ARM sejam executados em plataformas x86). A lista dos ABIs que um dispositivo Android pode executar podem ser encontrados na ro.product.cpu.abilistpropriedade, que pode ser alcançado em um shell (por exemplo, através de um aplicativo de terminal no dispositivo, ou sobre adb usando adb shell) usando o getpropcomando: getprop ro.product.cpu.abilist.

Joe
fonte