Оптимизация кода DEX

Оптимизация и обфускация кода с использованием R8 или альтернативных инструментов (таких как оптимизаторы, совместимые с ProGuard, или вторичные постпроцессоры DEX) уменьшают размер DEX-файла вашего приложения, повышают производительность во время выполнения и минимизируют потребление памяти.

DEX-файлы, или исполняемые файлы Dalvik , содержат скомпилированный код, используемый для запуска вашего приложения. Обычно это код на Java и Kotlin, в отличие от скомпилированного кода на C++ или файлов .so .

Оцените локальную оптимизацию кода R8.

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

unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

Если ваше приложение оптимизировано с помощью R8, вы можете измерить оптимизацию, обфускацию и уменьшение размера пакета приложения, используя анализатор конфигурации R8 . Подробное определение уменьшения размера, оптимизации и обфускации см. в разделе «Использование анализатора конфигурации R8» . Отчет анализатора конфигурации R8 также включен в навык анализа R8 .

Чтобы просмотреть метаданные после оптимизации, встроенные в пакет вашего приложения (для AGP версии 8.10 или выше), извлеките файл 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.