Как использовать R8, чтобы уменьшить размер приложения, оптимизировать его и ускорить его работу
Время на чтение: 5 минут
Как использовать R8, чтобы уменьшить размер приложения, оптимизировать его и ускорить его работу
Добро пожаловать на первый день Android Performance Spotlight Week!
Начнем с самого эффективного и простого способа повысить производительность приложения – включения оптимизатора R8 в полном режиме.
Вероятно, вы уже знаете, что R8 – это инструмент для уменьшения размера приложения. Он отлично удаляет неиспользуемый код и ресурсы, уменьшая размер приложения. Но его настоящая сила, в которой он действительно хорош, – это оптимизация.
Если вы включите полный режим и разрешите оптимизацию, R8 выполнит глубокую оптимизацию всей программы, переписав ваш код так, чтобы он стал принципиально более эффективным. Это не просто небольшое изменение.
После прочтения этой статьи посмотрите видео о Performance Spotlight Week, в котором рассказывается об оптимизаторе R8 на YouTube.
Как R8 повышает производительность приложения
Давайте рассмотрим основные шаги, которые выполняет оптимизатор R8 для повышения производительности приложения.
Tree shaking – это самый важный шаг для уменьшения размера приложения. На этом этапе оптимизатор R8 удаляет неиспользуемый код из библиотек, от которых зависит ваше приложение, а также неработающий код из вашей базы кода.
Встраивание методов заменяет вызов метода фактическим кодом, что повышает производительность во время выполнения.
Объединение классов и другие стратегии, позволяющие сделать код более компактным. Все ваши красивые абстракции, такие как интерфейсы и иерархии классов, на этом этапе не имеют значения и, скорее всего, будут удалены.
Минификация кода используется для изменения названий классов, полей и методов на более короткие и бессмысленные. Вместо MyDataModel вы можете получить класс a. Именно это вызывает больше всего путаницы при чтении трассировок стека из приложения, оптимизированного с помощью R8. Обратите внимание, что в AGP 9.0 мы улучшили этот процесс.
Удаление неиспользуемых ресурсов, например XML-файлов и графических объектов, позволяет дополнительно уменьшить размер приложения.
Благодаря этому оптимизатор R8 ускоряет запуск приложения, повышает плавность отрисовки интерфейса, снижает количество медленно формирующихся и зависших кадров, а также улучшает использование ресурсов на устройстве.
История успеха: как R8 помог повысить производительность Reddit
Чтобы продемонстрировать, как R8 может повысить производительность, рассмотрим пример Reddit. После включения R8 в полном режиме приложение Reddit для Android стало работать значительно лучше в различных областях.
Подпись: Как R8 улучшил производительность приложения Reddit
В результате холодный запуск стал на 40% быстрее, количество ошибок "Приложение не отвечает" (ANR) снизилось на 30% , рендеринг кадров улучшился на 25% , а размер приложения уменьшился на 14% .
Эти улучшения имеют решающее значение для удовлетворенности пользователей. Чем быстрее запускается приложение, тем меньше времени уходит на ожидание и тем быстрее пользователь получает доступ к контенту. Чем меньше ошибок ANR, тем стабильнее и надежнее приложение и тем меньше недовольства оно вызывает у пользователей. Более плавная отрисовка кадров устраняет задержки в интерфейсе, делая прокрутку и анимацию более плавными и отзывчивыми. Положительный технический эффект также был заметен по отзывам пользователей.
Подробнее об улучшениях читайте в нашем блоге.
Нетехнические побочные эффекты использования R8
Наш опыт работы с партнерами показывает, что эти технические улучшения напрямую влияют на удовлетворенность пользователей и могут отражаться на удержании пользователей, вовлеченности и продолжительности сеансов. Лояльность пользователей, которую можно измерить по количеству активных пользователей за день, неделю или месяц, также выросла благодаря улучшению технических показателей. Мы заметили, что оценки приложений в Google Play растут по мере внедрения R8. Поделитесь этой информацией с владельцами продуктов, техническими директорами и лицами, принимающими решения, чтобы ускорить работу приложения.
Поэтому давайте называть вещи своими именами: целенаправленная оптимизация производительности – это достоинство.
Как повысить эффективность приложения
Мы узнали, что руководство для разработчиков по R8 нуждается в доработке. И мы начали работать. Руководство для разработчиков по оптимизатору R8 стало более практичным и содержит подробные инструкции по включению и отладке R8.
В документации вы найдете общую стратегию внедрения, в которой подчеркивается важность выбора библиотек, поддерживающих оптимизацию, и постепенного внедрения функций R8 для обеспечения стабильности. Такой поэтапный подход позволяет безопасно использовать преимущества R8 и получать рекомендации по устранению сложных проблем.
Мы значительно расширили руководство по правилам Keep, которые являются основным механизмом управления оптимизатором R8. Теперь в ней есть раздел, в котором рассказывается, что такое правила хранения, как их применять, а также приводятся рекомендации по их созданию и ведению. Мы также приводим практические примеры использования, которые помогут вам понять, как правильно предотвратить удаление R8 кода, необходимого во время выполнения, например кода, доступ к которому осуществляется через рефлексию или использование нативного интерфейса JNI.
В документацию также добавлены важные последующие шаги и расширенные сценарии. Мы добавили раздел о тестировании и устранении неполадок, чтобы вы могли проверить, насколько повысилась эффективность, и устранить возможные проблемы. В разделе Расширенные настройки рассказывается, как настраивать таргетинг на определенные варианты сборки, выбирать, какие ресурсы сохранять или удалять, а также приводятся специальные инструкции по оптимизации для авторов библиотек, чтобы вы могли предоставить оптимизированный и совместимый с R8 пакет для использования другими разработчиками.
Как использовать все возможности оптимизатора R8
Начиная с версии 8.0 плагина Android Gradle, оптимизатор R8 по умолчанию использует полный режим. Если ваш проект разрабатывался в течение многих лет, в нем все ещё может быть устаревший флаг для отключения. Найдите в файле gradle.properties эту строку и удалите ее.
android.enableR8.fullMode=false // delete this line to enable R8's full potential
Теперь проверьте, включен ли R8 в файле build.gradle.kts вашего приложения для рабочей версии. Для этого нужно установить значение true для isMinifyEnabled и isShrinkResources. На этом этапе вы также можете передать стандартные и пользовательские файлы конфигурации.
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro"
)
}История успеха: повышение производительности Disney+
Инженеры Disney+ вкладывают средства в производительность приложения и оптимизируют его работу. Иногда даже небольшие изменения могут иметь огромное значение. Проверяя конфигурацию R8, команда обнаружила, что используется флаг -dontoptimize. Оно было добавлено в файл конфигурации по умолчанию, который до сих пор используется во многих приложениях.
После замены proguard-android.txt на proguard-android-optimize.txt команда Disney+ заметила значительные улучшения в работе приложения.
После выпуска новой версии приложения Disney+ стало запускаться на 30% быстрее, а количество ошибок ANR в активном режиме снизилось на 25 %.
Сегодня многие приложения по-прежнему используют файл proguard-android.txt, который содержит флаг -dontoptimize. Именно здесь и пригодятся наши улучшения инструментов.
Поддержка инструментов
Начиная с Android Studio Narwhal 3 Feature Drop, при использовании proguard-android.txt вы будете видеть предупреждение.
А начиная с AGP 9.0 мы полностью прекратим поддержку этого файла. Это значит, что вам нужно перейти на proguard-android-optimize.txt.
Мы также добавили в Android Studio новые функции, которые упрощают отладку кода, оптимизированного с помощью R8. Начиная с AGP 9.0 вы можете автоматически деобфусцировать трассировки стека в logcat Android Studio для сборок, обработанных R8. Это поможет вам точно определить строку кода, вызывающую проблему, даже в полностью оптимизированном приложении. Подробнее об этом мы расскажем в завтрашней записи блога, посвященной неделе производительности Android.
Что дальше
Посмотрите видео о Performance Spotlight Week, посвященное оптимизатору R8, на YouTube.
📣 Примите участие в Performance Challenge!
Попробуйте и оцените преимущества.
Попробуйте включить полный режим R8 для своего приложения уже сегодня.
- Чтобы начать, следуйте инструкциям в руководствах для разработчиков: включите оптимизацию приложений.
- Проверьте, используете ли вы
proguard-android.txt, и замените его наproguard-android-optimize.txt. - Затем оцените эффективность. Не просто чувствуйте разницу, а проверяйте ее. Чтобы оценить, насколько повысилась производительность, адаптируйте код из нашего примера приложения Macrobenchmark на GitHub и измерьте время запуска до и после.
Мы уверены, что вы заметите значительное улучшение эффективности приложения. Если у вас есть вопросы о включении R8 или устранении неполадок, используйте хештег #optimizationEnabled. Мы всегда рады помочь!
Подготовьте вопросы для сессии Ask Android в пятницу
Задавайте вопросы о производительности с хештегом #AskAndroid. В течение недели мы будем собирать ваши вопросы и ответим на некоторые из них в пятницу, 21 ноября, на сессии Ask Android, посвященной производительности. Завтра мы подробнее поговорим об отладке и устранении неполадок. А пока начните использовать R8, чтобы ускорить работу приложения.
-
Мероприятия и программыМы рассказали о простых, но эффективных инструментах, которые помогут вам создать производительное приложение. Среди них оптимизатор R8, оптимизация на основе профиля, Jetpack Compose и новое руководство по повышению производительности.
Ben Weiss, Sara Hamilton • Время на чтение: 3 минуты -
Мероприятия и программыВ этом году на Саммите для разработчиков Android мы рассказали, как развиваются инструменты разработчиков Android, чтобы вы могли работать эффективнее вместе со своими агентами.
Adarsh Fernando • Время на чтение: 10 минут -
Мероприятия и программыМы открываем прием заявок на участие в программе Android XR Developer Catalyst, которая призвана ускорить разработку приложений Android XR, готовых к запуску в течение следующего года.
Время на чтение: 1 минута
Получайте еженедельную рассылку с последними новостями о разработке для Android.