Вы можете оптимизировать отдельные пакеты, используя R8 с помощью packageScope . Это необязательный первый шаг для приложений, которые еще не используют R8, и не рекомендуется для приложений, которые уже используют R8.
Рассмотрите возможность использования packageScope
Если ваше приложение уже использует R8, не используйте packageScope , поскольку это неоптимальная конфигурация с точки зрения производительности и размера приложения. Вместо этого улучшите конфигурацию R8 вашего приложения, добавив улучшенные правила сохранения или, если используется режим совместимости, перейдя в полный режим R8.
Для приложений, которые еще не используют R8, но переходят на него, используйте packageScope для поэтапного управления переходом. Поскольку R8 применяет мощные оптимизации, которые могут изменить поведение приложения, ограничение этих оптимизаций конкретными пакетами, которые безопасно оптимизировать — такими как AndroidX и Kotlin — позволяет добиться повышения производительности с минимальным риском. После того, как ваше приложение станет стабильным, вы можете постепенно распространить эти оптимизации на остальную часть вашей кодовой базы и зависимостей, проверяя стабильность на каждом этапе.
Предварительные требования
Для использования R8 с packageScope требуется Android Gradle Plugin версии 9.0 или более поздней.
Настройте оптимизацию.
Чтобы включить оптимизацию с помощью 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 { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro") optimization { enable = true packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**") } } } }
Классный
android { buildTypes { release { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 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, чтобы определить, какие библиотеки вносят наибольший вклад в размер вашего приложения. 1. Создайте релизный AAB или APK с отключенной версией R8. 1. Откройте его в анализаторе и изучите файлы
dex. 1. Отсортируйте пакеты по размеру. Самые большие пакеты обеспечивают наибольшую отдачу от инвестиций (ROI) в оптимизацию. Нацеливание на них в первую очередь обеспечит наиболее значительное уменьшение размера на раннем этапе процесса, если у этих библиотек нет слишком широких правил сохранения. См. раздел «Разумный выбор библиотек» для получения дополнительной информации.
- Оцените зависимости . Просмотрите библиотеки вашего приложения. Хорошими кандидатами для добавления в список
- Проверьте изменения в поведении . После добавления каждого нового префикса пакета проведите всестороннее тестирование , чтобы выявить и устранить любые регрессии или неожиданные проблемы.
- Добавляйте пакеты приложений в последнюю очередь . Если ваши пакеты приложений не часто используют рефлексию, включите их в
packageScopeи добавляйте правила сохранения постепенно по мере необходимости. Если ваши пакеты приложений часто используют рефлексию, включите их вpackageScopeи добавьте общепакетные правила сохранения для необходимых пакетов. Пройдитесь по правилам сохранения, чтобы уточнить их. - Перейдите на использование R8 во всем приложении . После того, как большинство зависимостей вашего приложения будут включены в объявление
packageScopeи ваше приложение станет стабильным, удалитеpackageScopeчтобы оптимизировать все приложение в полнофункциональном режиме.