Вы можете оптимизировать отдельные пакеты, используя R8 с помощью packageScope . Это необязательный первый шаг для приложений, которые еще не используют R8, и не рекомендуется для приложений, которые уже используют R8.
Рассмотрите возможность использования packageScope
Если ваше приложение уже использует R8, не используйте packageScope , поскольку это неоптимальная конфигурация с точки зрения производительности и размера приложения. Вместо этого улучшите конфигурацию R8 вашего приложения, добавив улучшенные правила сохранения или, если используется режим совместимости, перейдя в полный режим R8.
Приложения, которые еще не используют R8, но переходят на него, могут использовать packageScope для поэтапного управления переходом. Поскольку R8 применяет мощные оптимизации, которые могут изменять поведение приложения, ограничение этих оптимизаций конкретными пакетами, которые безопасно оптимизировать — такими как AndroidX и Kotlin — позволяет добиться повышения производительности с минимальным риском. После того, как ваше приложение станет стабильным, вы можете постепенно распространить эти оптимизации на остальную часть вашей кодовой базы и зависимостей, проверяя стабильность на каждом этапе.
Предварительные требования
Для использования R8 с packageScope требуется:
- Android Gradle Plugin 9.0 или более поздней версии.
- R8 в полнофункциональном режиме , а не в режиме совместимости.
Настройте оптимизацию.
Чтобы включить оптимизацию с помощью packageScope , выполните следующие шаги.
Выберите библиотеки для оптимизации.
Определите библиотеки для оптимизации. Мы рекомендуем начать с библиотек AndroidX и Kotlin androidx.** , kotlin.** и kotlinx.** поскольку это стабильные библиотеки, настроенные для совместимости с R8.
Включить поддержку использования R8 с packageScope
Добавьте следующее в файл gradle.properties вашего проекта:
android.r8.gradual.support=true
Настройте блок оптимизации.
В файле build.gradle.kts (или build.gradle ) на уровне модуля добавьте блок optimization в конфигурацию сборки релиза. Внутри этого блока используйте packageScope , чтобы перечислить конкретные пакеты, которые вы хотите оптимизировать. В файле build.gradle.kts оберните список пакетов в setOf() .
Котлин
android {
buildTypes {
release {
optimization {
enable = true
packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
}
}
}
}
Классный
android {
buildTypes {
release {
optimization {
enable = true
packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
}
}
}
}
Проверьте оптимизацию.
После добавления или обновления объявления packageScope тщательно протестируйте приложение , чтобы убедиться в отсутствии неожиданных сбоев или изменений в поведении.
Переход от оптимизации отдельных пакетов к оптимизации всего приложения.
Для максимального повышения эффективности оптимизации следует постепенно переходить от использования packageScope к использованию R8 для всего приложения. Этот процесс включает в себя поэтапное расширение охвата оптимизации:
- Начните со стабильных библиотек . Для начала включите в список
packageScopeтолько широко используемые стабильные библиотеки, совместимые с оптимизациями R8. Начните с библиотек AndroidX и Kotlinandroidx.**,kotlin.**иkotlinx.**. - Постепенно добавляйте пакеты . Постепенно добавляйте новые префиксы пакетов в
packageScope:- Оцените зависимости . Просмотрите библиотеки вашего приложения. Хорошими кандидатами для добавления в список
packageScopeявляются официальные библиотеки Google (например,com.google.**) и другие мощные библиотеки, такие какOkHttp(например,okhttp3.**иokio.**). Отдавайте приоритет библиотекам, которые не требуют интенсивного использования рефлексии, сериализации или вызовов нативного кода (JNI). - Расставляйте приоритеты в зависимости от размера пакета . Используйте анализатор APK в Android Studio , чтобы определить, какие компоненты вносят наибольший вклад в размер вашего приложения.
- Создайте релизный AAB или APK-файл с отключенной версией R8.
- Откройте его в анализаторе и изучите файлы
dex. - Сортируйте пакеты по размеру. Самые большие пакеты обеспечивают наибольшую окупаемость инвестиций (ROI) в оптимизацию. Нацеливание на них в первую очередь позволит добиться наиболее значительного уменьшения размера на раннем этапе, при условии, что эти библиотеки не имеют слишком широких правил сохранения. См. раздел «Разумный выбор библиотек» для получения дополнительной информации.
- Оцените зависимости . Просмотрите библиотеки вашего приложения. Хорошими кандидатами для добавления в список
- Проверьте изменения в поведении . После добавления каждого нового префикса пакета проведите всестороннее тестирование , чтобы выявить и устранить любые регрессии или неожиданные проблемы.
- Добавляйте пакеты приложений в последнюю очередь . Если ваши пакеты приложений не часто используют рефлексию, включите их в
packageScopeи добавляйте правила сохранения постепенно по мере необходимости. Если ваши пакеты приложений часто используют рефлексию, включите их вpackageScopeи добавьте общепакетные правила сохранения для необходимых пакетов. Пройдитесь по правилам сохранения, чтобы уточнить их. - Перейдите на использование R8 во всем приложении . После того, как большинство зависимостей вашего приложения будут включены в объявление
packageScopeи ваше приложение станет стабильным, удалитеpackageScopeчтобы оптимизировать все приложение в полнофункциональном режиме.