апканализатор

Версия APK Analyzer для командной строки обеспечивает немедленное представление о составе вашего APK после завершения процесса сборки и позволяет сравнивать различия между двумя APK. Использование APK Analyzer сокращает время, которое вы тратите на отладку файлов и ресурсов DEX в вашем приложении, а также уменьшает размер вашего APK.

apkanalyzer включен в пакет инструментов командной строки Android SDK по адресу android_sdk /cmdline-tools/ version /bin/apkanalyzer . Кроме того, вы можете получить доступ к инструменту APK Analyzer в Android Studio, как описано в разделе «Анализ сборки с помощью APK Analyzer» .

Синтаксис

Синтаксис apkanalyzer :

apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]

subject – это то, что вы хотите запросить. Это может быть весь APK-файл или его часть. Тема может быть любой из следующих:

  • apk : анализ атрибутов APK-файла, таких как идентификатор приложения, код версии и имя версии.
  • files : анализ файлов внутри APK-файла.
  • manifest : анализ содержимого манифеста внутри APK-файла.
  • dex : анализ файлов DEX внутри файла APK.
  • resources : просмотр текстовых, графических и строковых ресурсов.

verb — это то, что вы хотите знать о предмете. Субъекты, глаголы и их параметры описаны в следующем разделе о командах .

Для каждой команды требуется указать APK-файл. Только команда apk compare требует указания второго APK.

Вы можете сократить каждый параметр, если он однозначен. Например, глобальный параметр --human-readable можно сократить до -h .

В следующем примере анализируется apk (субъект), чтобы получить его file-size (глагол), а затем печатается размер файла в удобочитаемом формате (опция -h ):

apkanalyzer -h apk file-size myapk.apk

Команды

Следующие описания команд организованы по темам и содержат список доступных комбинаций глаголов и опций для каждой темы:

Просмотр атрибутов APK-файла Описание
apk summary apk-file Печатает идентификатор приложения, код версии и имя версии.

Пример вывода:

com.myapp 5 1.1-beta
apk file-size apk-file Печатает общий размер файла APK.
apk download-size apk-file Печатает приблизительный размер загрузки APK.
apk features [--not-required] apk-file Распечатывает функции, используемые APK, которые запускают фильтрацию Play Store . Добавьте параметр --not-required чтобы включить в выходные данные функции, помеченные как необязательные.

Пример вывода:

android.hardware.type.watch
android.hardware.microphone implied:
    requested android.permission.RECORD_AUDIO permission
apk compare [ options ] apk-file apk-file2 Сравнивает размеры apk-file и apk-file2 . Вы можете включить следующие опции:
  • --different-only : печатает каталоги и файлы с различиями.
  • --files-only : не печатать записи каталога.
  • --patch-size : показывает оценку исправления для каждого файла вместо необработанной разницы.

Пример вывода (старый размер/новый размер/разница в размерах/путь):

39086736 48855615 9768879 /
10678448 11039232 360784 /classes.dex
18968956 18968956 0 /lib/
110576 110100 -476 /AndroidManifest.xml
...
Просмотр файловой системы APK Описание
files list apk-file Перечисляет все файлы в APK.

Пример вывода:

/
/classes2.dex
/classes.dex
/assets/
/assets/asset.data
/AndroidManifest.xml
/resources.arsc
/res/
...
files cat --file path apk-file Распечатывает содержимое файла. Вы должны указать путь внутри APK, используя параметр --file path , например --file /AndroidManifest.xml
Просмотр информации в манифесте Описание
manifest print apk-file Печатает манифест APK в формате XML.
manifest application-id apk-file Печатает значение идентификатора приложения.
manifest version-name apk-file Печатает значение имени версии.
manifest version-code apk-file Печатает значение кода версии.
manifest min-sdk apk-file Печатает минимальную версию SDK.
manifest target-sdk apk-file Печатает целевую версию SDK.
manifest permissions apk-file Печатает список разрешений.
manifest debuggable apk-file Печатает, можно ли отлаживать приложение.
Доступ к информации о файле DEX Описание
dex list apk-file Печатает список файлов DEX в APK.
dex references [--files path ] [--files path2 ] apk-file Печатает количество ссылок на методы в указанных файлах DEX. По умолчанию — все файлы DEX. Добавьте параметр --files чтобы указать конкретные файлы, которые вы хотите включить.

Пример вывода:

classes.dex 59598
classes2.dex 8042
dex packages [ option1 option2 ... ] apk-file Печатает дерево классов из DEX. В выходных данных P , C , M и F обозначают пакеты, классы, методы и поля соответственно. И x , k , r и d обозначают удаленные, сохраненные, упомянутые и определенные узлы соответственно.

Добавьте следующие параметры для уточнения вывода:

  • --defined-only : включает в выходные данные только классы, определенные в APK.
  • --files : указывает имена файлов DEX, которые необходимо включить. По умолчанию: все файлы DEX.
  • --proguard-folder file : указывает выходную папку Proguard для поиска сопоставлений.
  • --proguard-mappings file : указывает файл сопоставлений Proguard.
  • --proguard-seeds file : указывает файл семян Proguard.
  • --proguard-usages file : указывает файл использования Proguard.
  • --show-removed : показывает классы и члены, которые были удалены Proguard.

Пример вывода (тип/состояние/определенные методы/методы, на которые ссылаются/размер в байтах/имя):

P d 1 1 85 g
P d 1 1 85 g.a
C d 1 1 85 g.a.a
M d 1 1 45 g.a.a java.lang.Object get()
C r 0 1 40 byte[]
M r 0 1 40 byte[] java.lang.Object clone()
dex code --class class [--method method ] Печатает байт-код класса или метода в формате smali. Имя класса является обязательным и печатает полное имя класса для декомпиляции. Добавьте параметр --method , чтобы указать метод декомпиляции.

Формат декомпиляции метода — name(params)returnType , например someMethod(Ljava/lang/String;I)V .

Просмотр ресурсов, хранящихся в res/ и resources.arsc. Описание
resources packages Печатает список пакетов, определенных в таблице ресурсов.
resources configs --type type [--package package ] apk-file Печатает список конфигураций для указанного type . type — это тип ресурса, например string . Включите параметр --package если вы хотите указать имя пакета таблицы ресурсов, в противном случае будет использоваться первый определенный пакет.
resources value --config config --name name --type type [--package package ] apk-file Печатает значение ресурса, указанного в config , name и type . Опция type — это тип ресурса, например string .

Включите параметр --package если вы хотите указать имя пакета таблицы ресурсов, в противном случае будет использоваться первый определенный пакет.

resources names --config config --type type [--package package ] apk-file Печатает список имен ресурсов для конфигурации и типа. Опция type — это тип ресурса, например string . Включите параметр --package если вы хотите указать имя пакета таблицы ресурсов, в противном случае будет использоваться первый определенный пакет.
resources xml --file path apk-file Печатает удобочитаемую форму двоичного XML-файла. Включите параметр file , чтобы указать путь к файлу.