Site icon AppTractor

Как Tinder сократил холодные старты на 47%, благодаря R8 Configuration Analyzer

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:

Analyzer позволяет проводить аудит правил keep и оценивать их влияние:

Отчёт 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 продолжает работать над дальнейшим улучшением этого показателя.

Результаты:

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

Защита производительности с помощью непрерывной интеграции

Оптимизация и уменьшение кода — не одноразовая задача. За этим необходимо следить постоянно. После значительного улучшения показателей благодаря R8 Configuration Analyzer Android-команда Tinder решила встроить мониторинг оптимизации в повседневный процесс разработки, чтобы предотвращать регрессии.

Команда добавила новую задачу в конвейер CI/CD, которая отслеживает изменения показателей оптимизации. Благодаря этому каждый разработчик может видеть, как его изменения влияют на итоговую эффективность R8. Советуя другим командам внедрять анализ конфигурации R8, разработчики Tinder отдельно подчёркивают необходимость аудита внутренних зависимостей. Популярные сторонние библиотеки обычно поставляются с достаточно хорошо проработанными правилами. А вот внутренние корпоративные библиотеки, которые давно считаются «стабильными», могут содержать чрезмерно широкие правила, негативно влияющие на оптимизацию всего приложения.

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

Tinder столкнулся с сильно неоптимизированной кодовой базой и большим количеством DEX-файлов, поэтому команде требовался способ точно проанализировать правила минимизации приложения. R8 Configuration Analyzer позволил обнаружить слишком широкие правила во внутренней библиотеке и определить конкретные классы, на которые они воздействовали. Благодаря этому команда смогла безопасно оптимизировать конфигурацию.

В результате Tinder:

Команда продолжает работать над дальнейшим улучшением этих показателей.

Как использовать R8 Configuration Analyzer

Возможности R8 Configuration Analyzer зависят от используемой версии Android Gradle Plugin.

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

Подробнее о возможностях инструмента можно узнать в документации R8 Configuration Analyzer.

Exit mobile version