Проанализируйте свою сборку с помощью APK Analyzer

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


С помощью APK Analyzer вы можете:

  • Просматривайте абсолютный и относительный размер файлов в приложении, таких как файлы 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, который составляет данный объект.

Рисунок 1. Размеры файлов в анализаторе APK.

Просмотрите файл AndroidManifest.xml

Если ваш проект включает несколько файлов AndroidManifest.xml , например, для вариантов продукта, или содержит библиотеки, которые также предоставляют файл манифеста, они объединяются в один файл в вашем приложении. Этот файл манифеста обычно представляет собой бинарный файл внутри APK или пакета приложения, но при выборе в анализаторе APK восстанавливается и отображается XML-версия этого объекта.

Этот инструмент просмотра поможет вам понять любые изменения, которые могли быть внесены в ваше приложение во время сборки. Например, вы можете увидеть, как файл AndroidManifest.xml из библиотеки, от которой зависит ваше приложение, объединяется с итоговым файлом AndroidManifest.xml .

Кроме того, этот просмотрщик предоставляет некоторые возможности проверки синтаксиса. Предупреждения или ошибки отображаются в правом верхнем углу. На рисунке 2 показана ошибка, сообщенная для выбранного файла манифеста.

Рисунок 2. В правом верхнем углу для выбранного файла манифеста отображается значок ошибки.

Просмотреть файлы DEX

Программа просмотра DEX-файлов в APK Analyzer предоставляет мгновенный доступ к информации, содержащейся в DEX-файлах вашего приложения. Программа отображает количество классов, пакетов, общее количество ссылок и объявлений, что может помочь в принятии решения о целесообразности использования multidex или о том, как удалить зависимости, чтобы уложиться в лимит DEX в 64 КБ .

На рисунке 3 показано приложение среднего размера, размер которого не превышает лимит в 64 КБ в DEX-файле. Количество вызовов каждого пакета, класса и метода в DEX-файле указано в столбцах «Определенные методы» и «Ссылочные методы» .

В столбце «Ссылающиеся методы» подсчитываются все методы, на которые ссылается DEX-файл. Обычно это методы, определенные в вашем коде, библиотеках зависимостей, а также методы, определенные в стандартных пакетах Java и Android, используемых кодом. Именно эти методы учитываются в рамках ограничения в 64 000 методов в каждом DEX-файле.

В столбце «Определенные методы» учитываются только методы, определенные в одном из ваших DEX-файлов, поэтому это число является подмножеством столбца «Ссылочные методы» .

Рисунок 3. Приложение среднего размера.

Отфильтруйте древовидное представление файлов DEX.

Непосредственно над списком классов анализатор APK предоставляет фильтры для просмотра содержимого выбранного DEX-файла, как показано на рисунке 4.

Рисунок 4. Фильтры DEX, настроенные для отображения полей и методов для BuildConfig .

Чтобы использовать фильтры для отображения всех методов и полей внутри класса, выполните следующие действия:

  1. В списке файлов выберите файл classes.dex .
  2. В списке классов найдите и выберите нужный класс.
  3. Разверните выбранный вами класс.
  4. Показать поля (свернуть) для отображения или скрытия полей класса.
  5. Показать методы (свернуть) для отображения или скрытия методов класса.
  6. Показать все упомянутые методы или поляОтображать или скрывать используемые пакеты, классы, методы и поля.

    В древовидном представлении выделенные курсивом узлы — это ссылки, которые не имеют определения в выбранном DEX-файле. DEX-файл может ссылаться на методы и поля, определенные в другом файле. Например, System.out.println — это ссылка на метод println в фреймворке Android.

Загрузить сопоставления ProGuard

Рядом со значками фильтрации находятся значки сопоставления ProGuard. Значки ProGuard неактивны (серые), пока вы не загрузите набор файлов сопоставления ProGuard, которые добавляют функциональность в средство просмотра DEX, например, деобфускацию имен ( mapping.txt ), отображение удаленных узлов ( usage.txt ) и указание узлов, которые нельзя удалить ( seeds.txt ).

Файл сопоставления ProGuard, который вы импортируете, должен быть получен в результате той же сборки, которая создала DEX-файлы с включенным сжатием кода.

Рисунок 5. Загрузка сопоставлений Proguard...

Для загрузки файлов сопоставления ProGuard выполните следующие действия:

  1. Нажмите «Загрузить сопоставления Proguard...» .
  2. Перейдите в папку проекта, содержащую файлы сопоставления, и загрузите все файлы, любую их комбинацию или папку, содержащую эти файлы.

    Файлы сопоставления обычно находятся в project / app /build/outputs/mappings/release/ . Если средство выбора файлов обнаруживает такую ​​структуру проекта, оно по умолчанию выбирает папку 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 для обфускации и минимизации кода см. раздел «Сокращение, обфускация и оптимизация вашего приложения» .

Отобразить байт-код, найти примеры использования и сгенерировать правило сохранения.

В списке классов узлы имеют контекстное меню со следующими параметрами, позволяющими просмотреть байт-код, найти примеры использования и отобразить диалоговое окно с правилами ProGuard, которые можно скопировать и вставить для выбранного узла. Щелкните правой кнопкой мыши любой узел в списке классов , чтобы отобразить его контекстное меню.

Показать байт-код : Декомпилирует выбранный класс, метод или поле и отображает представление байт-кода smali в диалоговом окне следующим образом:

Рисунок 6. Байт-код DEX для метода init .

Найти использования : показывает, какие другие части кода DEX содержат ссылки на выбранный класс или метод, как показано на рисунке 7. Если у вас загружен файл seeds.txt , узлы, выделенные жирным шрифтом, указывают на то, что конфигурация ProGuard предотвращает их удаление во время сжатия:

Рисунок 7. Ссылки на MyClass .

Создать правило ProGuard Keep : Отображает правила ProGuard, которые можно скопировать и вставить в файл конфигурации ProGuard вашего проекта, как показано на рисунке 8. Это предотвращает удаление определенного пакета, класса, метода или поля на этапе сокращения кода. Для получения дополнительной информации см. раздел «Настройка того, какой код следует сохранить» .

Рисунок 8. Правила ProGuard, которые можно скопировать из диалогового окна в файл конфигурации ProGuard.

Просмотр кода и ресурсных сущностей

Различные задачи сборки изменяют конечные элементы приложения. Например, правила сжатия ProGuard могут изменить ваш окончательный код, а ресурсы изображений могут быть переопределены ресурсами в варианте продукта .

Чтобы просмотреть окончательную версию файлов с помощью анализатора APK, щелкните по элементу для предварительного просмотра текстового или графического элемента, как показано на рисунке 9.

Рисунок 9. Предварительный просмотр окончательного варианта изображения.

Анализатор APK также может отображать различные текстовые и бинарные файлы. Например, средство просмотра сущностей resources.arsc позволяет увидеть значения, специфичные для конфигурации, такие как языковые переводы для строкового ресурса. На рисунке 10 показаны переводы для каждого строкового ресурса.

Рисунок 10. Предварительный просмотр переведенных строковых ресурсов.

Сравнить файлы

Анализатор APK может сравнивать размеры элементов в двух разных APK-файлах или файлах пакетов приложений. Это полезно, когда нужно понять, почему размер вашего приложения увеличился по сравнению с предыдущей версией.

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

  1. Загрузите версию приложения, которую вы собираетесь опубликовать, в анализатор APK.
  2. В правом верхнем углу APK-анализатора нажмите «Сравнить с предыдущим APK...» .
  3. В диалоговом окне выбора найдите артефакт, который был последним опубликован для ваших пользователей, и нажмите ОК .

    Появляется диалоговое окно, подобное показанному на рисунке 11, которое поможет вам оценить, какое влияние обновление может оказать на пользователей.

На рисунке 11 показана разница между отладочной и релизной сборками конкретного приложения. Для этих типов сборок используются разные параметры сборки, которые по-разному изменяют базовые сущности.

Рисунок 11. Разница между отладочной и релизной версией APK.