Monzo — это британский цифровой банк с 15 миллионами клиентов, и их число продолжает расти. По мере масштабирования приложения команда разработки определила время запуска приложения как критически важную область для улучшения, однако опасалась, что это потребует значительных изменений в кодовой базе.
Полностью включив оптимизацию R8, Monzo добился огромного снижения на 35% показателя «Приложение не отвечает» (ANR). Это простое изменение доказало, что для эффективной оптимизации не всегда требуются сложные инженерные решения.
Обеспечение значительных улучшений с помощью полного режима R8
Monzo определил полный режим R8 как простое решение, которое стоит попробовать. И оно сработало, улучшив производительность по всем направлениям:
- Надежность запуска: холодные запуски улучшились на 30%, теплые запуски — на 24%, а горячие запуски — на 14%
- Скорость запуска: время запуска P50 улучшилось на 11%, а время запуска P90 — на 12%
- Эффективность: общий размер приложения уменьшился на 9%
- Стабильность: снижение ANR на 35%
Включение оптимизации одним изменением
Многие приложения для Android используют устаревший файл конфигурации по умолчанию, который отключает большую часть функциональности оптимизатора R8. Основное изменение, внесенное Monzo для разблокировки этих улучшений производительности, заключалось в замене файла по умолчанию proguard-android.txt на proguard-android-optimize.txt. Это изменение удаляет инструкцию -dontoptimize и позволяет R8 корректно выполнять свою работу.
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
)
}
}
После внесения этого изменения стоит пересмотреть ваши конфигурационные файлы Keep. Эти файлы указывают R8, какие части кода не нужно трогать — обычно потому, что к ним обращаются динамически или через внешние библиотеки. Очистка лишних правил Keep позволяет R8 выполнять больше оптимизаций.
Улучшение производительности прокрутки с помощью Baseline Profiles
Чтобы дополнительно повысить качество пользовательского опыта, Monzo внедрила Baseline Profiles, сосредоточившись в первую очередь на производительности прокрутки и рендеринга в своей основной ленте. Такой подход позволил полностью оптимизировать самые частые пользовательские сценарии — запуск приложения и прокрутку ленты. Влияние на рендеринг оказалось значительным: производительность прокрутки на уровне P90 выросла на 71%, а на уровне P95 — на 87%. В результате прокрутка в приложении стала заметно плавнее.
Monzo встроила этот процесс в свой релизный цикл, чтобы сохранять достигнутые улучшения в долгосрочной перспективе. «Мы запускаем генерацию baseline profile каждый будний день — перед выполнением ночных сборок — и коммитим последние изменения после завершения процесса», — объясняет инженер Monzo.
Следование современным практикам Android-разработки
Опыт Monzo показывает, чего можно добиться, если придерживаться актуальных рекомендаций в использовании инструментов Android. Хотя legacy-приложения часто сталкиваются со сложностями из-за активного использования reflection, в случае Monzo переход оказался довольно простым благодаря тщательному документированию Keep-правил. «Мы всегда добавляем комментарий с объяснением, зачем нужно то или иное Keep-правило, чтобы понимать, когда его можно безопасно удалить», — говорят разработчики.
Совет другим командам — регулярно сверяться с текущими стандартами: «Посмотрите на последние рекомендации Google по производительности приложений и проверьте, следуете ли вы всем актуальным советам».
Чтобы начать и узнать больше о R8, посетите: https://d.android.com/r8

