Android Studio включает в себя анализатор APK, который сразу же дает представление о составе вашего APK или пакета приложений Android после завершения процесса сборки. Использование анализатора APK может сократить время, затрачиваемое на отладку файлов и ресурсов DEX в вашем приложении, а также уменьшить размер APK. Анализатор APK также доступен из командной строки с помощью apkanalyzer
.
С помощью анализатора APK вы можете:
- Просмотрите абсолютный и относительный размер файлов в приложении, например файлов ресурсов DEX и Android.
- Понимание состава файлов DEX.
- Быстро просматривайте окончательные версии файлов в приложении, например файл
AndroidManifest.xml
. - Выполните параллельное сравнение двух APK или пакетов приложений.
Существует три способа доступа к анализатору APK, когда проект открыт:
- Перетащите APK или пакет приложений в окно редактора Android Studio.
- Переключитесь на представление «Проект» в окне «Проект» , затем дважды щелкните APK в каталоге
build/output/apks/
по умолчанию. - В строке меню выберите «Создать» > «Анализ APK» , затем выберите APK или пакет приложений.
Просмотр информации о файле и размере
APK-файлы — это файлы формата ZIP. Анализатор APK отображает каждый файл или папку как единое целое, которое можно развернуть для навигации по папкам. Иерархия объектов отражает структуру файлов и папок в APK-файле.
Анализатор APK показывает размер заархивированного файла (или «размер необработанного файла») и значения размера загружаемого файла для каждого объекта, как показано на рисунке 1. Необработанный размер файла представляет собой вклад объекта в общий размер APK. Размер загрузки представляет собой предполагаемый сжатый размер объекта в том виде, в каком он будет доставлен через Google Play. Процент от общего размера загрузки указывает процент от общего размера загрузки APK, который представляет объект.
Просмотр AndroidManifest.xml
Если ваш проект включает несколько файлов AndroidManifest.xml
, например для разновидностей продукта, или включает библиотеки, которые также предоставляют файл манифеста, они объединяются в один файл в вашем приложении. Этот файл манифеста обычно представляет собой двоичный файл в составе APK или пакета приложения, но при его выборе в анализаторе APK XML-форма этого объекта реконструируется и представляется.
Это средство просмотра поможет вам понять любые изменения, которые могли быть внесены в ваше приложение во время сборки. Например, вы можете увидеть, как файл AndroidManifest.xml
из библиотеки, от которой зависит ваше приложение, объединяется с окончательным файлом AndroidManifest.xml
.
Кроме того, эта программа просмотра предоставляет некоторые возможности проверки. Предупреждения или ошибки появляются в правом верхнем углу. На рис. 2 показано сообщение об ошибке для выбранного файла манифеста.
Просмотр файлов DEX
Средство просмотра файлов DEX в APK Analyzer дает вам немедленный доступ к базовой информации в файлах DEX в вашем приложении. Средство просмотра предоставляет количество классов, пакетов, общее количество ссылок и объявлений, что может помочь принять решение, использовать ли мультидекс или как удалить зависимости, чтобы снизить предел DEX в 64 КБ .
На рис. 3 показано приложение среднего размера, размер которого меньше 64 КБ DEX. Каждый пакет, класс и метод в файле DEX имеют счетчики, указанные в столбцах «Определенные методы» и «Ссылочные методы» .
В столбце «Ссылочные методы» подсчитываются все методы, на которые ссылается файл DEX. Обычно сюда входят методы, определенные в вашем коде, библиотеки зависимостей и методы, определенные в стандартных пакетах Java и Android, которые использует код. Это методы, учитываемые при достижении ограничения в 64 КБ в каждом файле DEX.
В столбце «Определенные методы» учитываются только методы, определенные в одном из ваших файлов DEX, поэтому это число является подмножеством «Ссылочные методы» .
Фильтрация дерева файлов DEX
Над списком классов анализатор APK предоставляет фильтры для просмотра содержимого выбранного файла DEX, как показано на рисунке 4.
Чтобы использовать фильтры для отображения всех методов и полей внутри класса, выполните следующие действия:
- В списке «Файл» выберите файл
classes.dex
. - В списке Класс найдите и выберите класс.
- Разверните выбранный вами класс.
- Переключить отображение полей чтобы показать или скрыть поля класса.
- Переключить Показать методы чтобы показать или скрыть методы класса.
Переключить Показать все ссылочные методы или полячтобы показать или скрыть связанные пакеты, классы, методы и поля.
В древовидном представлении узлы, выделенные курсивом, представляют собой ссылки, которые не имеют определения в выбранном файле DEX. Файл DEX может ссылаться на методы и поля, определенные в другом файле. Например,
System.out.println()
— это ссылка на методprintln()
в платформе Android.
Загрузка сопоставлений ProGuard
Рядом со значками фильтрации находятся значки сопоставления ProGuard. Значки ProGuard неактивны до тех пор, пока вы не загрузите набор файлов сопоставления ProGuard, которые добавляют функциональные возможности средству просмотра DEX, такие как деобфускация имен ( mapping.txt
), отображение удаленных узлов ( usage.txt
) и указание узлов, которые могут быть удалены. его нельзя удалить ( seeds.txt
).
Импортируемый файл сопоставления ProGuard должен быть результатом той же сборки, из которой были созданы файлы DEX с включенным сжатием кода.
Чтобы загрузить файлы сопоставления ProGuard, выполните следующие действия:
- Нажмите Загрузить сопоставления Proguard... .
Перейдите в папку проекта, содержащую файлы сопоставления, и загрузите все файлы, любую комбинацию файлов или папку, содержащую файлы.
Файлы сопоставления обычно находятся в
project / app /build/outputs/mappings/release/
. Средство выбора файлов по умолчанию использует папку выпуска , если обнаруживает такую структуру проекта.Сначала средство выбора файлов проверяет имена файлов, которые точно соответствуют
mapping.txt
,seeds.txt
иusage.txt
. Затем средство выбора файлов проверяет наличие имен файлов, которые где-то содержат текстовоеmapping
,usage
илиseeds
и заканчиваются на.txt
. Например,release-seeds-1.10.15.txt
совпадает.
В следующем списке описаны файлы сопоставления:
-
seeds.txt
: узлы, удаление которых во время сжатия предотвращается конфигурацией ProGuard, выделены жирным шрифтом. -
mapping.txt
: включает деобфускацию имен. так что вы можете восстановить исходные имена узлов, которые были запутаны R8. Например, вы можете восстановить запутанные имена узлов, такие какa
,b
,c
вMyClass
,MainActivity
иmyMethod()
. usage.txt
: включает отображение удаленных узлов. поэтому вы можете показать классы, методы и поля, которые были удалены R8 во время сжатия. Восстановленные узлы показаны зачеркиванием.Дополнительные сведения об использовании R8 для запутывания и минимизации кода см. в разделе Сжатие, запутывание и оптимизация вашего приложения .
Показать байт-код, найти способы использования и создать правило Keep
Узлы в представлении списка классов имеют контекстное меню со следующими параметрами, которые позволяют просматривать байт-код, находить способы использования и отображать диалоговое окно, показывающее правила ProGuard для копирования и вставки для выбранного узла. Щелкните правой кнопкой мыши любой узел в представлении списка классов , чтобы отобразить его контекстное меню.
Показать байт-код : декомпилирует выбранный класс, метод или поле и отображает представление байт-кода smali в диалоговом окне следующим образом:
Найти использование : показывает, какие другие части кода DEX имеют ссылки на выбранный класс или метод, как показано на рисунке 7. Если у вас загружен seeds.txt
, узлы, выделенные жирным шрифтом, указывают на то, что конфигурация ProGuard предотвращает их удаление во время сжатия. :
Создать правило ProGuard Keep : показывает правила ProGuard, которые вы можете скопировать и вставить в файл конфигурации ProGuard вашего проекта, как показано на рисунке 8. Это предотвращает удаление данного пакета, класса, метода или поля на этапе сжатия кода. Дополнительные сведения см. в разделе Настройка кода для сохранения .
Просмотр объектов кода и ресурсов
Различные задачи сборки изменяют конечные объекты в приложении. Например, правила сжатия ProGuard могут изменить ваш окончательный код, а ресурсы изображения могут быть переопределены ресурсами в версии продукта .
Чтобы просмотреть окончательную версию ваших файлов с помощью анализатора APK, щелкните объект для предварительного просмотра текста или изображения, как показано на рисунке 9.
Анализатор APK также может отображать различные текстовые и двоичные файлы. Например, средство просмотра сущностей resources.arsc
позволяет просматривать значения, специфичные для конфигурации, например языковые переводы строкового ресурса. На рисунке 10 вы можете увидеть переводы для каждого строкового ресурса.
Сравнить файлы
Анализатор APK может сравнивать размер объектов в двух разных файлах APK или пакета приложений. Это полезно, когда вам нужно понять, почему ваше приложение увеличилось в размере по сравнению с предыдущим выпуском.
Прежде чем опубликовать обновленное приложение, выполните следующие действия:
- Загрузите версию приложения, которое вы собираетесь опубликовать, в анализатор APK.
- В правом верхнем углу анализатора APK нажмите «Сравнить с предыдущим APK...» .
В диалоговом окне выбора найдите артефакт, который был последним опубликован для ваших пользователей, и нажмите «ОК» .
Появится диалоговое окно, подобное показанному на рисунке 11, которое поможет вам оценить влияние обновления на пользователей.
На рис. 11 показана разница между отладочной и выпускной сборками конкретного приложения. Между этими типами сборки используются разные параметры сборки, которые по-разному изменяют базовые объекты.
, Android Studio включает в себя анализатор APK, который сразу же дает представление о составе вашего APK или пакета приложений Android после завершения процесса сборки. Использование анализатора APK может сократить время, затрачиваемое на отладку файлов и ресурсов DEX в вашем приложении, а также уменьшить размер APK. Анализатор APK также доступен из командной строки с помощью apkanalyzer
.
С помощью анализатора APK вы можете:
- Просматривайте абсолютный и относительный размер файлов в приложении, например файлов ресурсов DEX и Android.
- Понимание состава файлов DEX.
- Быстро просматривайте окончательные версии файлов в приложении, например файл
AndroidManifest.xml
. - Выполните параллельное сравнение двух APK или пакетов приложений.
Существует три способа доступа к анализатору APK, когда проект открыт:
- Перетащите APK или пакет приложений в окно редактора Android Studio.
- Переключитесь на представление «Проект» в окне «Проект» , затем дважды щелкните APK в каталоге
build/output/apks/
по умолчанию. - В строке меню выберите «Сборка» > «Анализ APK» , затем выберите APK или пакет приложений.
Просмотр информации о файле и размере
APK-файлы — это файлы формата ZIP. Анализатор APK отображает каждый файл или папку как единое целое, которое можно развернуть для навигации по папкам. Иерархия объектов отражает структуру файлов и папок в APK-файле.
Анализатор APK показывает размер сжатого файла (или «размер необработанного файла») и значения размера загружаемого файла для каждого объекта, как показано на рисунке 1. Необработанный размер файла представляет собой вклад объекта в общий размер APK. Размер загрузки представляет собой предполагаемый сжатый размер объекта в том виде, в каком он будет доставлен через Google Play. Процент от общего размера загрузки указывает процент от общего размера загрузки APK, который представляет объект.
Просмотр AndroidManifest.xml
Если ваш проект включает несколько файлов AndroidManifest.xml
, например для разновидностей продукта, или включает библиотеки, которые также предоставляют файл манифеста, они объединяются в один файл в вашем приложении. Этот файл манифеста обычно представляет собой двоичный файл в составе APK или пакета приложения, но при его выборе в анализаторе APK XML-форма этого объекта реконструируется и представляется.
Это средство просмотра поможет вам понять любые изменения, которые могли быть внесены в ваше приложение во время сборки. Например, вы можете увидеть, как файл AndroidManifest.xml
из библиотеки, от которой зависит ваше приложение, объединяется с окончательным файлом AndroidManifest.xml
.
Кроме того, эта программа просмотра предоставляет некоторые возможности проверки. Предупреждения или ошибки появляются в правом верхнем углу. На рис. 2 показано сообщение об ошибке для выбранного файла манифеста.
Просмотр файлов DEX
Средство просмотра файлов DEX в APK Analyzer дает вам немедленный доступ к базовой информации в файлах DEX в вашем приложении. Средство просмотра предоставляет количество классов, пакетов, общее количество ссылок и объявлений, что может помочь принять решение, использовать ли мультидекс или как удалить зависимости, чтобы снизить ограничение DEX в 64 КБ .
На рис. 3 показано приложение среднего размера, размер которого меньше 64 КБ DEX. Каждый пакет, класс и метод в файле DEX имеют счетчики, указанные в столбцах «Определенные методы» и «Ссылочные методы» .
В столбце «Ссылочные методы» подсчитываются все методы, на которые ссылается файл DEX. Обычно сюда входят методы, определенные в вашем коде, библиотеки зависимостей и методы, определенные в стандартных пакетах Java и Android, которые использует код. Это методы, учитываемые при достижении ограничения в 64 КБ в каждом файле DEX.
В столбце «Определенные методы» учитываются только методы, определенные в одном из ваших файлов DEX, поэтому это число является подмножеством «Ссылочные методы» .
Фильтрация дерева файлов DEX
Над списком классов APK-анализатор предоставляет фильтры для просмотра содержимого выбранного файла DEX, как показано на рисунке 4.
Чтобы использовать фильтры для отображения всех методов и полей внутри класса, выполните следующие действия:
- В списке «Файл» выберите файл
classes.dex
. - В списке Класс найдите и выберите класс.
- Разверните выбранный вами класс.
- Переключить отображение полей чтобы показать или скрыть поля класса.
- Переключить Показать методы чтобы показать или скрыть методы класса.
Переключить Показать все ссылочные методы или полячтобы показать или скрыть связанные пакеты, классы, методы и поля.
В древовидном представлении узлы, выделенные курсивом, представляют собой ссылки, которые не имеют определения в выбранном файле DEX. Файл DEX может ссылаться на методы и поля, определенные в другом файле. Например,
System.out.println()
— это ссылка на методprintln()
в платформе Android.
Загрузка сопоставлений ProGuard
Рядом со значками фильтрации находятся значки сопоставления ProGuard. Значки ProGuard неактивны до тех пор, пока вы не загрузите набор файлов сопоставления ProGuard, которые добавляют функциональные возможности средству просмотра DEX, такие как деобфускация имен ( mapping.txt
), отображение удаленных узлов ( usage.txt
) и указание узлов, которые могут быть удалены. его нельзя удалить ( seeds.txt
).
Импортируемый файл сопоставления ProGuard должен быть результатом той же сборки, из которой были созданы файлы DEX с включенным сжатием кода.
Чтобы загрузить файлы сопоставления ProGuard, выполните следующие действия:
- Нажмите Загрузить сопоставления Proguard... .
Перейдите в папку проекта, содержащую файлы сопоставления, и загрузите все файлы, любую комбинацию файлов или папку, содержащую файлы.
Файлы сопоставления обычно находятся в
project / app /build/outputs/mappings/release/
. Средство выбора файлов по умолчанию использует папку выпуска , если обнаруживает эту структуру проекта.Сначала средство выбора файлов проверяет имена файлов, которые точно соответствуют
mapping.txt
,seeds.txt
иusage.txt
. Затем средство выбора файлов проверяет наличие имен файлов, которые где-то содержат текстовоеmapping
,usage
илиseeds
и заканчиваются на.txt
. Например,release-seeds-1.10.15.txt
совпадает.
В следующем списке описаны файлы сопоставления:
-
seeds.txt
: узлы, удаление которых во время сжатия предотвращается конфигурацией ProGuard, выделены жирным шрифтом. -
mapping.txt
: включает деобфускацию имен. так что вы можете восстановить исходные имена узлов, которые были запутаны R8. Например, вы можете восстановить запутанные имена узлов, такие какa
,b
,c
вMyClass
,MainActivity
иmyMethod()
. usage.txt
: включает отображение удаленных узлов. поэтому вы можете показать классы, методы и поля, которые были удалены R8 во время сжатия. Восстановленные узлы показаны зачеркиванием.Дополнительные сведения об использовании R8 для запутывания и минимизации кода см. в разделе Сжатие, запутывание и оптимизация вашего приложения .
Показать байт-код, найти способы использования и создать правило Keep
Узлы в представлении списка классов имеют контекстное меню со следующими параметрами, которые позволяют просматривать байт-код, находить способы использования и отображать диалоговое окно, показывающее правила ProGuard для копирования и вставки для выбранного узла. Щелкните правой кнопкой мыши любой узел в представлении списка классов , чтобы отобразить его контекстное меню.
Показать байт-код : декомпилирует выбранный класс, метод или поле и отображает представление байт-кода smali в диалоговом окне следующим образом:
Найти использование : показывает, какие другие части кода DEX имеют ссылки на выбранный класс или метод, как показано на рисунке 7. Если у вас загружен seeds.txt
, узлы, выделенные жирным шрифтом, указывают на то, что конфигурация ProGuard предотвращает их удаление во время сжатия. :
Создать правило ProGuard Keep : показывает правила ProGuard, которые вы можете скопировать и вставить в файл конфигурации ProGuard вашего проекта, как показано на рисунке 8. Это предотвращает удаление данного пакета, класса, метода или поля на этапе сжатия кода. Дополнительные сведения см. в разделе Настройка кода для сохранения .
Просмотр объектов кода и ресурсов
Различные задачи сборки меняют конечные объекты в приложении. Например, правила сжатия ProGuard могут изменить ваш окончательный код, а ресурсы изображения могут быть переопределены ресурсами в версии продукта .
Чтобы просмотреть окончательную версию ваших файлов с помощью анализатора APK, щелкните объект для предварительного просмотра текста или изображения, как показано на рисунке 9.
Анализатор APK также может отображать различные текстовые и двоичные файлы. Например, средство просмотра сущностей resources.arsc
позволяет просматривать значения, специфичные для конфигурации, например языковые переводы строкового ресурса. На рисунке 10 вы можете увидеть переводы для каждого строкового ресурса.
Сравнить файлы
Анализатор APK может сравнивать размер объектов в двух разных файлах APK или пакета приложений. Это полезно, когда вам нужно понять, почему ваше приложение увеличилось в размере по сравнению с предыдущим выпуском.
Прежде чем опубликовать обновленное приложение, выполните следующие действия:
- Загрузите версию приложения, которое вы собираетесь опубликовать, в анализатор APK.
- В правом верхнем углу анализатора APK нажмите «Сравнить с предыдущим APK...» .
В диалоговом окне выбора найдите артефакт, который был последним опубликован для ваших пользователей, и нажмите «ОК» .
Появится диалоговое окно, подобное показанному на рисунке 11, которое поможет вам оценить влияние обновления на пользователей.
На рис. 11 показана разница между отладочной и выпускной сборками конкретного приложения. Между этими типами сборки используются разные параметры сборки, которые по-разному изменяют базовые объекты.