Версия 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 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 . Вы можете включить следующие опции:
Пример вывода (старый размер/новый размер/разница в размерах/путь): 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 обозначают удаленные, сохраненные, упомянутые и определенные узлы соответственно.Добавьте следующие параметры для уточнения вывода:
Пример вывода (тип/состояние/определенные методы/методы, на которые ссылаются/размер в байтах/имя): 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 , чтобы указать метод декомпиляции. Формат декомпиляции метода — |
Просмотр ресурсов, хранящихся в 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 . Включите параметр |
resources names --config config --type type [--package package ] apk-file | Печатает список имен ресурсов для конфигурации и типа. Опция type — это тип ресурса, например string . Включите параметр --package если вы хотите указать имя пакета таблицы ресурсов, в противном случае будет использоваться первый определенный пакет. |
resources xml --file path apk-file | Печатает удобочитаемую форму двоичного XML-файла. Включите параметр file , чтобы указать путь к файлу. |