Как определить, для какой архитектуры предназначен APK?


9

Я пишу скрипт для проверки большого количества apks. Некоторые работают на x86, а некоторые работают на руку. Есть ли способ, которым я могу сказать, какие apks предназначены для какой архитектуры?

Я просмотрел отчет о бэджах с aapt dump badging application.apk. Для некоторых версий, совместимых с arm, я вижу, native-code: 'armeabi-v7a'но не для всех, и не вижу признаков того, на какой архитектуре работают x86-совместимые apks.

Я также попытался использовать apktool, чтобы разорвать apk и изучить AndroidManifest.xml. Я не вижу в этом ничего общего с архитектурой чипа.

Любые идеи?

Ответы:


17

Один (довольно грубый) способ узнать, для какой архитектуры созданы нативные библиотеки APK, - это разархивировать его (это всего лишь zip-файл) и взглянуть на папку libs - если приложение содержит какие-либо нативные библиотеки, они будут разбиты на следующие подпапки внутри (с скомпилированными библиотеками внутри них):

См. Пакет приложений Android для получения дополнительной информации о структуре APK и источнике приведенного выше списка. Более полный (включая MIPS64) список, а также некоторую информацию об особенностях архитектуры можно найти в заархивированной версии страницы управления ABI для Android Developer , захваченной 18 апреля 2016 года.

Интересно, что нацеливание на один ABI (где приложение включает в себя собственные библиотеки, разработанные для одной архитектуры) не обязательно означает, что приложение не будет работать на устройствах, использующих другие архитектуры. Например, ARMv8-a имеет обратную совместимость с ARM и ARMv7-a, а устройства Intel x86 для Android содержат собственный уровень трансляции , позволяющий выполнять код ARM на устройствах x86 (позволяя приложениям, поддерживающим только ARM, работать на платформах x86). Перечень АБИС , что Android устройство может выполнить , можно найти в ro.product.cpu.abilistсобственности, которая может быть достигнута в оболочке (например , через терминальное приложение на устройстве, или через ADB , используя adb shell) , используя getpropкоманду: getprop ro.product.cpu.abilist.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.