Разработка
Как Tinder сократил холодные старты на 47%, благодаря R8 Configuration Analyzer
Tinder столкнулся с сильно неоптимизированной кодовой базой и большим количеством DEX-файлов, поэтому команде требовался способ точно проанализировать правила минимизации приложения.
Tinder стремится помогать людям находить реальные знакомства, делая встречи простыми и увлекательными для каждого нового поколения пользователей. Однако по мере роста кодовой базы Android-приложения росла и её сложность. До недавней оптимизации около 70% приложения фактически не оптимизировалось, а сборка содержала 17 DEX-файлов, причём три из них использовались только при запуске. Хотя команда уже включила R8, значительная часть его возможностей была заблокирована правилами keep, и разработчики не могли понять, какие именно правила мешают оптимизации. Чтобы сократить время запуска и уменьшить количество заметных пользователю ошибок Application Not Responding (ANR), Tinder обратился к новому R8 Configuration Analyzer.
Используя R8 Configuration Analyzer, Tinder смог найти и удалить непреднамеренные блокировки оптимизации. Результаты оказались заметными сразу: холодные запуски сократились на 47%, размер загружаемого приложения уменьшился на 28,98% — до 61,5 МБ, а число заметных пользователю ANR снизилось на 28%.
Configuration Analyzer
R8 Configuration Analyzer показывает, насколько эффективно R8 может оптимизировать приложение, отслеживая показатели уменьшения кода, оптимизации и обфускации. Это позволяет увидеть области, где конфигурацию можно улучшить. Инструмент показывает слишком широкие, избыточные или устаревшие keep-правила, включая правила, приходящие из сторонних библиотек. Благодаря этому можно оценить их влияние и точнее настроить конфигурацию R8.
Основные показатели Configuration Analyzer:
- Shrinking Score — доля кода, которую R8 может удалить или уменьшить.
- Optimization Score — доля кода, доступная для оптимизаций, например встраивания методов или горизонтального объединения классов.
- Obfuscation Score — доля классов, методов и полей, которые R8 может переименовать для уменьшения размера приложения.
Analyzer позволяет проводить аудит правил keep и оценивать их влияние:
- Поиск слишком широких правил. Можно сузить правила, распространяющиеся на целые пакеты и ограничивающие работу R8, а также увидеть конкретные классы, методы и поля, исключённые из уменьшения, оптимизации и обфускации.
- Уточнение правил. Ограничить их только конкретными классами и методами, которым действительно требуется рефлексия.
- Удаление избыточных правил. Убрать правила, которые в текущей сборке не соответствуют ни одному классу, методу или полю.
- Поиск идентичных правил. Это правила keep, которые охватывают одни и те же классы, поля и методы, либо просто дублируются в одном или нескольких файлах конфигурации.
- Поиск поглощённых правил. Удаление узких правил, которые уже полностью покрываются более общими.
- Поиск проблемных библиотек. Анализ общего влияния
consumer keep rules, объединённых из всех подключённых библиотек.

Отчёт R8 Configuration Analyzer для демонстрационного приложения.
Чтобы упростить использование R8 Configuration Analyzer вместе с агентными инструментами, Google опубликовала R8 Analyzer skill. Этот навык помогает автоматизировать анализ отчёта R8 Configuration Analyzer: он выводит основные показатели оптимизации, обфускации и уменьшения кода, а также выделяет пять наиболее значимых правил keep, мешающих оптимизации.
Поиск скрытых блокировок оптимизации
До внедрения R8 Configuration Analyzer Android-приложение Tinder накопило значительный технический долг из-за плохо оптимизированной кодовой базы. Это напрямую ухудшало пользовательский опыт, в частности приводило к медленным холодным запускам приложения.
Чтобы решить проблему, команда Tinder использовала R8 Configuration Analyzer для полного аудита своей конфигурации R8. Анализатор показал, что даже при использовании полного режима R8 показатель оптимизации кодовой базы составлял всего около 28%. С помощью R8 Configuration Analyzer Tinder обнаружил, что одна из внутренних библиотек компании добавляла слишком широкое и ничем не ограниченное правило keep:
# Prevents optimization in all public classes along with all of their public and protected members
-keep public class * {
public protected *;
}
Это «широкое» правило непреднамеренно распространялось на множество зависимостей во всём приложении и блокировало оптимизацию большого количества классов. Ситуация усугублялась тем, что такое чрезмерно широкое правило предотвращало сбои во время выполнения. Из-за этого разработчики часто забывали добавлять более точные новые правила для функций, использующих рефлексию. В результате скрытые проблемы постепенно накапливались.
Благодаря данным R8 Configuration Analyzer команда смогла определить конкретные классы, на которые воздействовало широкое правило из внутренней библиотеки. Разработчики быстро обнаружили, что оптимизация блокировалась в больших классах, которые не вызывались динамически и которые R8 вполне мог оптимизировать. После уточнения этого keep правила Tinder смог разблокировать значительную часть возможностей R8, разобраться с накопившейся устаревшей конфигурацией и существенно повысить показатели оптимизации.
R8 Optimization Score вырос с 28% до 50%, что сразу дало заметный прирост производительности. При этом команда Tinder продолжает работать над дальнейшим улучшением этого показателя.
Результаты:
- Более быстрый запуск. Число пользователей, сталкивающихся с медленным холодным стартом приложения, сократилось на 47%.
- Меньший размер. Размер загружаемого приложения уменьшился с 86,6 МБ до 61,5 МБ, то есть на 28,98%.
- Повышение стабильности. Доля заметных пользователю ANR снизилась с 0,35% до 0,28%, существенно приблизившись к средним показателям аналогичных приложений.
- Снижение сложности. Количество DEX-файлов сократилось с 17 до 11, причём для запуска теперь требуется только два.
Помимо технических улучшений, более эффективная оптимизация приложения дала и измеримый бизнес-результат: выросла вовлечённость пользователей, особенно на рынках с менее производительными устройствами.
- Рост вовлечённости в отдельных регионах. Наибольший прирост наблюдался в странах, где значительную долю рынка занимают устройства с небольшим объёмом оперативной памяти. Снижение частоты ANR стало одним из ключевых факторов улучшения показателей на этих рынках.
- Общий рост вовлечённости. После улучшения оптимизации приложения вовлечённость выросла на 3%.

Защита производительности с помощью непрерывной интеграции
Оптимизация и уменьшение кода — не одноразовая задача. За этим необходимо следить постоянно. После значительного улучшения показателей благодаря R8 Configuration Analyzer Android-команда Tinder решила встроить мониторинг оптимизации в повседневный процесс разработки, чтобы предотвращать регрессии.
Команда добавила новую задачу в конвейер CI/CD, которая отслеживает изменения показателей оптимизации. Благодаря этому каждый разработчик может видеть, как его изменения влияют на итоговую эффективность R8. Советуя другим командам внедрять анализ конфигурации R8, разработчики Tinder отдельно подчёркивают необходимость аудита внутренних зависимостей. Популярные сторонние библиотеки обычно поставляются с достаточно хорошо проработанными правилами. А вот внутренние корпоративные библиотеки, которые давно считаются «стабильными», могут содержать чрезмерно широкие правила, негативно влияющие на оптимизацию всего приложения.
Основные выводы
Tinder столкнулся с сильно неоптимизированной кодовой базой и большим количеством DEX-файлов, поэтому команде требовался способ точно проанализировать правила минимизации приложения. R8 Configuration Analyzer позволил обнаружить слишком широкие правила во внутренней библиотеке и определить конкретные классы, на которые они воздействовали. Благодаря этому команда смогла безопасно оптимизировать конфигурацию.
В результате Tinder:
- почти вдвое сократил количество медленных холодных стартов;
- уменьшил размер приложения более чем на 28%;
- снизил число ANR;
- сократил количество DEX-файлов;
- создал более здоровую и производительную основу для дальнейшего развития приложения.
Команда продолжает работать над дальнейшим улучшением этих показателей.
Как использовать R8 Configuration Analyzer
Возможности R8 Configuration Analyzer зависят от используемой версии Android Gradle Plugin.
- AGP 9.3. В AGP 9.3 R8 Configuration Analyzer полностью интегрирован. При запуске release-сборки с R8 отчёт автоматически создаётся в каталоге:
build/outputs/mapping/release/configanalyzer.html - Отдельная задача Gradle. В AGP 9.3 также появилась отдельная задача Gradle, позволяющая создать отчёт Analyzer без полной release-сборки. Это существенно ускоряет цикл проверки при локальной настройке правил keep:
./gradlew :app:analyzeReleaseR8Config. Отчёт будет сохранён по адресу:build/reports/r8/r8-config-analyzer-release.html - Использование со старыми версиями AGP. Если используется версия ниже AGP 9.3, мигрировать весь проект на новую версию Android Gradle Plugin ради анализа конфигурации не обязательно. Можно отдельно обновить R8 до версии 9.3.7-dev или новее, следуя инструкции Replacing R8 in AGP. Чтобы локально создать отчёт, нужно запустить сборку со специальным параметром:
./gradlew assembleRelease -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>
Подробнее о возможностях инструмента можно узнать в документации R8 Configuration Analyzer.
-
Новости4 недели назадВидео и подкасты о мобильной разработке 2026.30
-
Видео и подкасты для разработчиков4 недели назадSpec-Driven Development на практике — SDD, BMAD, OpenSpec, вайб кодинг
-
Обучение4 недели назадМенторство в IT: как опыт одного специалиста ускоряет развитие другого
-
Компании4 недели назадЗаморозили USDT: что делать и как вернуть доступ к деньгам
