Оптимизация кода DEX — это важный параметр Android, который помогает отслеживать и улучшать качество компиляции, размер и производительность вашего приложения. Оптимизация и обфускация кода с помощью R8 или альтернативных инструментов (таких как оптимизаторы, совместимые с ProGuard, или вторичные постпроцессоры DEX) уменьшают размер DEX-кода вашего приложения, улучшают производительность во время выполнения и минимизируют потребление памяти.
DEX-файлы, или исполняемые файлы Dalvik , содержат скомпилированный код, используемый для запуска вашего приложения. Обычно это код на Java и Kotlin, в отличие от скомпилированного кода на C++ или файлов .so .
Android Vitals сообщает метрики оптимизации кода DEX для всех приложений и игр, но устанавливает пороговые значения только для приложений и игр, отвечающих определенным требованиям к размеру.
Выявите проблему
Android Vitals может предупредить вас о низком уровне оптимизации DEX-кода вашего приложения. Это включает в себя обфускацию, уменьшение размера и оптимизацию для приложений и игр, использующих R8. Для приложений, не использующих R8, Android Vitals пытается проверить показатели оптимизации, уменьшения размера и обфускации, но при необходимости использует эвристические методы обфускации в качестве промежуточного варианта.
Состояние оптимизации монитора
Android Vitals может помочь улучшить производительность вашего приложения, оповещая вас через Play Console, когда ваше приложение не соответствует минимальным заданным процентам оптимизации кода. Подробное определение сжатия, оптимизации и обфускации см. в разделе «Использование анализатора конфигурации R8» .
Для приложений, созданных с использованием последнего обновления AGP версии 8.10 или выше, эти процентные значения берутся из включенного файла r8.json .
Для более старых версий AGP или в случаях, когда файл r8.json отсутствует, проценты рассчитываются на основе файла mapping.txt , если он присутствует, или с использованием эвристических алгоритмов DEX, если файл mapping недоступен.
Для приложений, оптимизированных с помощью альтернативного оптимизатора кода, Android Vitals выполняет анализ для оценки процента классов, методов и полей, которые обфусцированы в пакете приложения.
Минимальный общий размер DEX
Хотя Android Vitals рассчитывает показатели оптимизации кода для всех приложений, вы будете получать оповещения только в том случае, если размер пакета вашего приложения соответствует следующим требованиям к общему размеру DEX:
- Приложения : Пакет содержит не менее 10 МБ DEX-кода в несжатом виде.
- Игры : В комплект входит не менее 50 МБ DEX-кода в несжатом виде.
Android Vitals отображает размер DEX-файла вашего приложения, но вы также можете измерить его локально с помощью командной строки:
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
Оцените локальную оптимизацию кода R8.
Если ваше приложение оптимизировано с помощью R8, вы можете измерить оптимизацию, обфускацию и уменьшение размера пакета приложения, используя анализатор конфигурации R8 . Отчет анализатора конфигурации R8 также включен в навык анализа R8 .
Чтобы просмотреть точные метаданные, которые Android Vitals использует для расчета ваших результатов, извлеките файл r8.json из пакета вашего приложения:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
Устраните проблему
Для решения проблемы низких показателей оптимизации кода DEX, ознакомьтесь с рекомендациями, основанными на вашей системе сборки и оптимизаторе:
Плагин Android Gradle и R8
Чтобы улучшить показатели оптимизации кода R8 DEX, ознакомьтесь с рекомендациями в разделе «Улучшение оптимизации R8» . Вы также можете использовать навык R8 Analyzer для получения дополнительных рекомендаций по оптимизации правил сохранения данных в вашем приложении.
Системы сборки, отличные от R8, и постпроцессоры DEX
Если в вашем конвейере сборки используются собственные инструменты сборки или вторичные постпроцессоры DEX, выполните следующие шаги для повышения оптимизации вашего приложения:
- Откройте пакет вашего приложения в Android Studio и просмотрите его в анализаторе APK .
- Выберите все файлы
.dex. - Обратите особое внимание на файлы с наибольшим размером при переключении кнопки «Деобфускация имен» (примечание: для этого необходимо загрузить файл
mapping.txt). Если вы обнаружите, что некоторые из этих файлов остаются большими после обфускации, вероятно, на них влияют правила сохранения данных, действующие на уровне всего пакета. - Найдите в файле
proguard-rules.pro,configuration.txtили аналогичном файле для вашего оптимизатора, если вы не используете R8, правила keep, соответствующие пакетам, которые не обфусцируются. Например, еслиcom.foo.— это большой пакет в вашем dex-файле, найдите правила keep в формате-keep com.foo.**или-keep com.foo.bar.**. - Имейте в виду, что правила сохранения данных пользователями библиотеки могут быть не так просто идентифицировать. Если вы подозреваете, что правило пользователя библиотеки влияет на оптимизацию, вы можете проверить это локально, добавив его в автономное тестовое приложение, использующее последнюю версию AGP, и проверив его с помощью R8 Configuration Analyzer.