Примеры из практики

Благодаря новому анализатору конфигурации R8, Tinder сократил количество холодных запусков приложения на 47%.

4 минуты чтения
3 автора
Ajesh Pai, Ulises Uriel Verduzco Díaz , Tracy Agyemang

Tinder is on a mission to power and inspire real connections by making meeting easy and fun for every new generation of singles. However, as their Android application codebase grew in size, so did its complexity. Prior to their latest optimization efforts, approximately 70% of the application was not optimized, carrying 17 dex files,including three dedicated just to startup. Although they had enabled R8, much of its optimization potential was blocked due to keep rules, and the team was unable to identify which specific rules were preventing optimization. To reduce startup time and decrease user-perceived Application Not Responding (ANR) errors, Tinder turned to the new R8 Configuration Analyzer to tackle these challenges.

Благодаря использованию анализатора конфигурации R8 , Tinder успешно выявил и устранил непреднамеренные препятствия для оптимизации. Результаты были незамедлительными и значительными: Tinder добился 47% сокращения количества холодных запусков приложения, уменьшил размер загружаемого приложения на 28,98% (до 61,5 МБ) и снизил воспринимаемое пользователями количество ошибок ANR на 28%.

Анализатор конфигурации

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

В анализаторе конфигурации отображаются следующие ключевые показатели:

  • Показатель сжатия: Процентное соотношение кода, доступное для сжатия R8.
  • Оценка оптимизации: Процент кода, открытого для оптимизации (например, встраивание методов, горизонтальное слияние классов).
  • Показатель обфускации: процент классов, методов и полей, которые можно переименовать в R8 для уменьшения размера.

Используйте анализатор для проверки правил хранения и их влияния:

  • Найдите общие правила: сузьте область действия общепакетных правил, ограничивающих оптимизацию R8, и определите конкретные классы, методы и поля, исключенные из сжатия, оптимизации и обфускации.
  • Уточните правила: для оптимизации следует ориентироваться только на определенные классы/методы, требующие использования рефлексии.
  • Удалите избыточные правила : удалите правила, которые не соответствуют ни одному классу, методу или полю в вашей текущей сборке.
  • Идентичные правила : Идентичные правила сохранения означают правила, которые нацелены на одни и те же классы, поля и методы, или дублирующие объявления правил сохранения в одном или разных файлах правил сохранения.
  • Найти включенные правила: Удалить конкретные правила, уже охваченные более широкими конфигурациями.
  • Выявление проблемных библиотек: проверьте совокупное влияние оптимизации, достигаемое за счет объединения правил сохранения данных потребителями из всех библиотек.
R8-Configuration-Analyzer-Screenshot.png
Отчет анализатора конфигурации R8 для тестового приложения

To assist you in using the R8 Configuration Analyzer with agentic tools, we have published an R8 Analyzer skill . This skill optimizes automated development workflows by summarizing the R8 Configuration Analyzer report to display key metrics: optimization, obfuscation, and shrinking scores. It also highlights the five most impactful keep rules, giving you clear insight into what blocks code optimization.

Выявление скрытых препятствий для оптимизации

image.png

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

Для решения этих проблем команда Tinder использовала анализатор конфигурации R8 для всестороннего аудита своей конфигурации R8. Анализатор показал, что оптимизация кода R8 составляла около 28% даже в полном режиме R8. С помощью анализатора конфигурации R8 Tinder выявил, что внутренняя библиотека вводила широкое, не имеющее области действия правило сохранения.

# Prevents optimization in all public classes along with all of their public and protected members

-keep public class * {
    public protected *;
}

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

By leveraging the insights provided by the R8 Configuration Analyzer, the team successfully traced and analyzed the specific classes affected by the broad keep rule from the library. The team immediately discovered that optimization was being blocked in larger, non-dynamically invoked classes where R8 could do optimization. Refining this specific keep rule allowed Tinder to unlock substantial optimization capabilities, untangle their legacy configurations, and drastically improve their overall optimization numbers, with R8 scores increasing from 28% to 50%, driving immediate performance gains across the application, and the Tinder team is actively working to further improve this figure.

  • Ускоренная загрузка: Команда добилась снижения на 47% числа пользователей, испытывающих проблемы с медленным запуском приложения при первом включении.
  • Уменьшение занимаемого места: размер загружаемого приложения снизился с 86,6 МБ до 61,5 МБ (снижение на 28,98%).
  • Улучшена стабильность: количество ошибок «Приложение не отвечает» (ANR), воспринимаемых пользователями, снизилось с 0,35% до 0,28%, что значительно приблизило их к средним показателям среди аналогичных приложений.
  • Снижена сложность: общее количество DEX-файлов сокращено с 17 до 11, включая всего два файла запуска.

Помимо этих технических улучшений производительности, повышенная оптимизация приложений напрямую привела к ощутимому росту бизнеса и повышению вовлеченности пользователей, особенно на рынках с ограниченными ресурсами.

  • Региональное взаимодействие: Страны, где устройства с малым объемом оперативной памяти занимают огромную долю рынка, продемонстрировали наибольший рост вовлеченности, а снижение частоты ложных срабатываний стало ключевым фактором повышения вовлеченности на этом обширном рынке.
  • Рост вовлеченности: Вовлеченность увеличилась на 3% с момента повышения эффективности оптимизации приложения.
image.png

Обеспечение будущей производительности за счет непрерывной интеграции.

Решение проблемы минимизации кода — это не разовое решение, а требует постоянного внимания. Вдохновленные значительными улучшениями, достигнутыми благодаря анализатору конфигурации R8, команда разработчиков Android в Tinder заблаговременно интегрировала мониторинг оптимизации в свой ежедневный рабочий процесс, чтобы предотвратить регрессии.

Tinder's team added a new job in their CI/CD pipeline to report changes in the optimization stats so everyone can see how their contribution is affecting optimization. When advising other developers considering R8 configuration integration, the team emphasizes the importance of auditing internal dependencies. While most popular third-party libraries come with well-defined rules, internal company projects that are considered "stable" might actually be introducing wide rules that negatively impact overall optimization.

Основные выводы

Faced with a heavily unoptimized codebase and a high volume of DEX files, Tinder needed a way to cleanly audit their app's minification rules. The R8 Configuration Analyzer provided the ideal tooling necessary to identify overly broad internal library rules, , the classes affected by the keep rule, allowing the team to confidently optimize their codebase. As a result, Tinder successfully cut cold starts by nearly half, shrank their APK size by over 28%, and established a healthier, more performant foundation for their users, with the team actively working to further improve these numbers.

Как использовать анализатор конфигурации R8

Анализатор конфигурации R8 и его автономные функции могут использоваться в зависимости от текущей версии плагина Android Gradle (AGP):

1. Выпуск AGP 9.3: Анализатор конфигурации R8 полностью интегрирован и выпущен вместе с AGP 9.3. При запуске сборки R8 отчет будет сгенерирован в папке `build/outputs/mapping/release/configanalyzer.html` .

2. Автономная задача Gradle: В AGP 9.3 представлена ​​автономная задача Gradle, которая позволяет генерировать отчет анализатора без выполнения полной сборки релиза, обеспечивая гораздо более быструю обратную связь при локальном уточнении правил сохранения:

./gradlew :app:analyzeReleaseR8Config

Отчет генерируется по адресу build/reports/r8/r8-config-analyzer-release.html.

3. Использование на более старых версиях AGP: Если вы используете версию AGP ниже 9.3, вам не нужно переносить всю версию AGP для анализа вашей конфигурации. Вы можете обновить версию R8 до 9.3.7-dev или выше, следуя инструкциям по замене R8 в AGP . Чтобы сгенерировать отчет локально, запустите сборку с указанным параметром:

./gradlew assembleRelease  -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>

Для получения более подробной информации см. документацию по анализатору конфигурации R8 .

Автор:
Продолжить чтение