Для обеспечения наилучшего пользовательского опыта следует оптимизировать приложение, сделав его максимально компактным и быстрым. Наш оптимизатор приложений, R8, упрощает работу приложения, удаляя неиспользуемый код и ресурсы, переписывая код для оптимизации производительности во время выполнения и многое другое. Для ваших пользователей это означает:
- Более быстрое время запуска
- Улучшена производительность рендеринга и выполнения программы.
- Меньше АНР
Чтобы включить оптимизацию приложения, установите isMinifyEnabled = true (для оптимизации кода) и isShrinkResources = true (для оптимизации ресурсов) в скрипте сборки приложения на уровне релизной сборки, как показано в следующем коде. Мы рекомендуем всегда включать оба параметра. Мы также рекомендуем включать оптимизацию приложения только в финальной версии вашего приложения, которую вы тестируете перед публикацией — обычно это релизная сборка, — поскольку оптимизация увеличивает время сборки вашего проекта и может затруднить отладку из-за способа изменения кода.
Котлин
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Классный
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
Оптимизация сокращения ресурсов для еще более компактных приложений.
В версии 8.12.0 плагина Android Gradle Plugin (AGP) реализовано оптимизированное уменьшение объема ресурсов, цель которого — интеграция оптимизации ресурсов и кода для создания еще более компактных и быстрых приложений.
Включите оптимизированное сокращение ресурсов
Чтобы включить новый оптимизированный конвейер сжатия ресурсов для версий AGP до 9.0.0, добавьте следующее в файл gradle.properties вашего проекта:
android.r8.optimizedResourceShrinking=true
Если вы используете AGP 9.0.0 или более новую версию, вам не нужно устанавливать параметр android.r8.optimizedResourceShrinking=true . Оптимизированное сокращение ресурсов применяется автоматически, если в конфигурации сборки включен isShrinkResources = true .
Проверьте и настройте параметры оптимизации R8.
Чтобы R8 мог в полной мере использовать свои возможности оптимизации , удалите следующую строку из файла gradle.properties вашего проекта, если он существует:
android.enableR8.fullMode=false # Remove this line from your codebase.
Обратите внимание, что включение оптимизации приложения затрудняет понимание трассировки стека, особенно если R8 переименовывает имена классов или методов. Чтобы получить трассировку стека, которая корректно соответствует вашему исходному коду, см. раздел «Восстановление исходной трассировки стека» .
Если включена поддержка R8, следует также создать профили автозагрузки для еще большей производительности при запуске системы.
Если включение оптимизации приложения приводит к ошибкам, вот несколько способов их устранения:
- Добавьте правила сохранения , чтобы не изменять часть кода.
- Внедряйте оптимизации постепенно .
- Обновите свой код, используя библиотеки, лучше подходящие для оптимизации .
Если вас интересует оптимизация скорости сборки, см. раздел «Настройка работы R8» для получения информации о том, как настроить R8 в соответствии с вашей средой.
Изменения в поведении версий AGP и R8.
В таблице ниже приведены основные функции, представленные в различных версиях плагина Android Gradle (AGP) и компилятора R8.
| версия AGP | Представленные функции |
|---|---|
| 9.0 | Оптимизированное сокращение ресурсов: включено по умолчанию (управляется с помощью android.r8.optimizedResourceShrinking ). Оптимизированное сокращение ресурсов помогает интегрировать сокращение ресурсов с конвейером оптимизации кода, что приводит к созданию меньших по размеру и более быстрых приложений. Оптимизируя одновременно код и ссылки на ресурсы, оно выявляет и удаляет ресурсы, на которые ссылается исключительно неиспользуемый код. Это значительное улучшение по сравнению с предыдущими отдельными процессами оптимизации.Это особенно полезно для приложений, которые используют значительные ресурсы и код в разных форм-факторах, обеспечивая измеренное снижение размера приложения более чем на 50%. В результате уменьшение размера приводит к уменьшению объема загружаемых файлов, ускорению установки и улучшению пользовательского опыта за счет более быстрого запуска, улучшенной отрисовки и меньшего количества ошибок ANR. Фильтрация правил библиотеки: поддержка глобальных параметров (например, -dontobfuscate ) в правилах обработки данных библиотеки прекращена, и приложения будут их отфильтровывать. Для получения дополнительной информации см. раздел «Добавление глобальных параметров» .Проверка на null в Kotlin: оптимизирована по умолчанию (управляется с помощью -processkotlinnullchecks ). В этой версии также значительно улучшена скорость сборки. Для получения дополнительной информации см. раздел «Глобальные параметры для дополнительной оптимизации» .Оптимизация отдельных пакетов: Вы можете использовать packageScope для оптимизации отдельных пакетов. Эта функция находится на стадии экспериментальной поддержки. Для получения дополнительной информации см. раздел «Оптимизация указанных пакетов с помощью packageScope .Оптимизация по умолчанию: поддержка функции getDefaultProguardFile("proguard-android.txt") была прекращена, поскольку она включает -dontoptimize , которого следует избегать. Вместо этого используйте "proguard-android-optimize.txt" . Если вам необходимо глобально отключить оптимизацию в вашем приложении, добавьте флаг вручную в файл proguard . |
| 8.12 | Сжатие ресурсов: добавлена начальная поддержка (по умолчанию отключено. Включить можно с помощью isShrinkResources ). Сжатие ресурсов работает в тандеме с R8 для эффективного выявления и удаления неиспользуемых ресурсов.Трассировка Logcat: Поддержка автоматической трассировки в окне Logcat в Android Studio. |
| 8.6 | Улучшена трассировка: по умолчанию включена трассировка по имени файла и номеру строки для всех уровней minSdk (ранее для этого требовался minSdk 26+ в версии 8.2).Обновление до версии R8 помогает обеспечить легкую и понятную читаемость трассировок стека из обфусцированных сборок. В этой версии улучшено сопоставление номеров строк и исходных файлов, что упрощает автоматическое отслеживание сбоев такими инструментами, как Android Studio Logcat, до исходного кода. |
| 8.0 | Полный режим по умолчанию: Полный режим R8 обеспечивает значительно более мощную оптимизацию. Он включен по умолчанию. Вы можете отключить его, используя android.enableR8.fullMode=false . |
| 7.0 | Доступен полный режим: Введен как функция, которую можно включить по желанию, используя android.enableR8.fullMode=true . Полный режим применяет более мощные оптимизации, делая более строгие предположения о том, как ваш код использует рефлексию и другие динамические функции. Хотя он уменьшает размер приложения и повышает производительность, он может потребовать дополнительных правил сохранения, чтобы предотвратить удаление необходимого кода. |