Tinder сокращает время холодного запуска приложения на 47% с помощью нового анализатора конфигурации R8
Время на чтение: 4 минуты
Миссия Tinder – помогать людям находить друг друга и вдохновлять их на создание настоящих отношений. Мы делаем знакомства простыми и увлекательными для каждого нового поколения одиноких людей. Однако по мере роста базы кода приложения для Android усложнялась и его структура. До оптимизации около 70% приложения не было оптимизировано. В нем было 17 DEX-файлов, три из которых использовались только для запуска. Хотя разработчики включили R8, большая часть потенциала оптимизации была заблокирована из-за правил сохранения, и команда не могла определить, какие именно правила мешали оптимизации. Чтобы сократить время запуска и уменьшить количество ошибок ANR ("Приложение не отвечает") в активном режиме, разработчики Tinder решили использовать новый инструмент R8 Configuration Analyzer.
С помощью анализатора конфигурации R8 разработчики Tinder выявили и удалили непреднамеренные блокировщики оптимизации. Результаты не заставили себя ждать: количество холодных запусков приложения сократилось на 47 %, размер скачиваемого файла уменьшился на 28,98% (до 61,5 МБ), а число ошибок ANR в активном режиме снизилось на 28%.
Анализатор конфигурации
Анализатор конфигурации R8 показывает оптимизацию R8, отслеживая показатели сжатия, оптимизации и обфускации, чтобы выявить области, требующие улучшения. В нем показаны широкие, избыточные или устаревшие правила сохранения, в том числе из внешних библиотек, чтобы вы могли проанализировать влияние правил сохранения и уточнить их.
В Анализаторе конфигурации представлены следующие основные показатели:
- Показатель сжатия. Процент кода, доступный для сжатия R8.
- Показатель оптимизации. Процент кода, который можно оптимизировать (например, встраивание методов, горизонтальное объединение классов).
- Оценка обфускации. Процент классов, методов и полей, которые R8 может переименовать, чтобы уменьшить размер.
С помощью анализатора можно проверить правила хранения и их влияние:
- Поиск общих правил. Сузьте область действия правил на уровне пакета, которые ограничивают оптимизацию R8, и определите конкретные классы, методы и поля, исключенные из сжатия, оптимизации и обфускации.
- Уточните правила. Настройте таргетинг только на определенные классы или методы, требующие рефлексии, чтобы разблокировать оптимизацию.
- Удалите лишние правила. Удалите правила, которые не соответствуют ни одному классу, методу или полю в текущей сборке.
- Идентичные правила. Это правила, которые применяются к одним и тем же классам, полям и методам, или дублирующиеся объявления правил в одном или нескольких файлах.
- Поиск поглощенных правил. Удалите правила, которые уже охвачены более широкими настройками.
- Выявляйте проблемные библиотеки. Проверяйте, как на оптимизацию влияют объединенные правила сохранения потребителей из всех библиотек.
Чтобы вам было проще использовать анализатор конфигурации R8 с агентными инструментами, мы опубликовали навык анализа R8. Этот навык оптимизирует автоматизированные рабочие процессы разработки, обобщая отчет R8 Configuration Analyzer для отображения ключевых показателей: оптимизации, обфускации и уменьшения. Кроме того, в нем выделены пять правил сохранения, которые сильнее всего влияют на оптимизацию кода.
Выявление скрытых препятствий для оптимизации
До интеграции анализатора конфигурации R8 приложение Tinder для Android страдало от значительного технического долга из-за сильно неоптимизированной базы кода. Это напрямую ухудшало пользовательский опыт, приводя к медленному холодному запуску.
Чтобы решить эти проблемы, команда Tinder использовала анализатор конфигурации R8 для комплексного аудита конфигурации R8. Анализатор показал, что оптимизация базы кода с помощью R8 составила около 28% даже в полном режиме. С помощью R8 Configuration Analyzer разработчики Tinder обнаружили, что внутренняя библиотека вводит широкое правило сохранения без области действия.
# Prevents optimization in all public classes along with all of their public and protected members -keep public class * { public protected *; }
Это "широкое" правило непреднамеренно охватило различные зависимости во всем приложении, что помешало оптимизации большого количества классов. Поскольку правило, охватывающее слишком много элементов, предотвращало сбои во время выполнения, разработчики часто забывали добавлять новые правила для новых функций, использующих рефлексию. В результате со временем накапливались скрытые проблемы.
Используя данные анализатора конфигурации R8, команда успешно отследила и проанализировала классы, затронутые общим правилом сохранения из библиотеки. Команда сразу обнаружила, что оптимизация блокировалась в более крупных классах, вызываемых нединамически, где R8 мог бы выполнить оптимизацию. Уточнив это правило, разработчики Tinder смогли значительно улучшить оптимизацию, избавиться от устаревших конфигураций и повысить общие показатели оптимизации. Оценка R8 выросла с 28% до 50%, что сразу же привело к повышению производительности приложения. Команда Tinder активно работает над дальнейшим улучшением этого показателя.
- Более быстрая загрузка. Команда на 47% сократила число пользователей, у которых приложение запускалось медленно.
- Меньший размер. Размер скачиваемого приложения уменьшился с 86,6 МБ до 61,5 МБ (на 28,98 %).
- Повышение стабильности. Доля ошибок «Приложение не отвечает» (ANR) в активном режиме снизилась с 0,35% до 0,28%, что значительно ближе к медианным показателям аналогов.
- Упрощение. Общее количество DEX-файлов сократилось с 17 до 11, включая всего два файла запуска.
Помимо технических улучшений, оптимизация приложения привела к росту бизнеса и повышению вовлеченности пользователей, особенно на рынках с ограниченными ресурсами.
- Вовлеченность в регионах. В странах, где устройства с малым объемом ОЗУ занимают большую долю рынка, наблюдался самый высокий рост вовлеченности. Снижение доли ошибок ANR стало ключевым фактором повышения вовлеченности на этом обширном рынке.
- Рост вовлеченности. После оптимизации приложения вовлеченность выросла на 3 %.
Как обеспечить эффективность в будущем с помощью непрерывной интеграции
Минификация кода – это не однократное действие, а постоянный процесс. Вдохновившись результатами, команда Android-разработчиков Tinder интегрировала мониторинг оптимизации в свой ежедневный рабочий процесс, чтобы предотвращать регрессии.
Команда Tinder добавила в конвейер CI/CD новую задачу, которая сообщает об изменениях в статистике оптимизации. Теперь каждый сотрудник видит, как его вклад влияет на оптимизацию. Другим разработчикам, которые планируют интегрировать конфигурацию R8, команда советует уделить особое внимание проверке внутренних зависимостей. Большинство популярных сторонних библиотек поставляются с четко определенными правилами, но внутренние проекты компании, которые считаются стабильными, могут на самом деле вводить широкие правила, негативно влияющие на общую оптимизацию.
Основные выводы
База кода Tinder была плохо оптимизирована, а DEX-файлов было слишком много. Разработчикам требовался способ проверить правила минификации приложения. Анализатор конфигурации R8 предоставил идеальный инструмент, необходимый для выявления слишком широких правил внутренней библиотеки и классов, затронутых правилом сохранения, что позволило команде уверенно оптимизировать свою базу кода. В результате время холодного запуска сократилось почти вдвое, а размер APK-файла уменьшился более чем на 28 %. Приложение стало работать стабильнее и быстрее, и команда Tinder продолжает улучшать эти показатели.
Как использовать анализатор конфигурации 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, вам не нужно обновлять ее, чтобы проанализировать конфигурацию. Вы можете самостоятельно обновить R8 до версии 9.3.7-dev или более поздней, следуя инструкциям по замене R8 в AGP. Чтобы создать отчет локально, запустите сборку с указанным свойством:
./gradlew assembleRelease -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>
Подробную информацию можно найти в документации по анализатору конфигурации R8.
-
Истории успехаGrab – ведущее суперприложение в Юго-Восточной Азии, которое предлагает услуги доставки, мобильности и финансовые услуги миллионам пользователей в восьми странах.
Ajesh Pai, Nguyen Van Minh, Tracy Agyemang • Время на чтение: 5 минут -
Истории успехаWhatsApp – крупнейшая в мире платформа для обмена сообщениями, которой пользуются миллиарды людей по всему миру. Это стандартный инструмент для общения людей в разных регионах, который позволяет обмениваться сообщениями конфиденциально, надежно и безопасно.
Niharika Arora, Tracy Agyemang, Mayank Jain • Чтение займет 8 минут -
Истории успехаKarrot – это гиперлокальное приложение для торговли между пользователями, в котором можно покупать, продавать и обменивать товары с другими подтвержденными пользователями. С момента запуска в Южной Корее в 2015 году платформа вышла на глобальные рынки и собрала более 43 миллионов зарегистрированных пользователей.
Thomas Ezan, Tracy Agyemang • Время на чтение: 2 минуты
Получайте еженедельную рассылку с последними новостями о разработке для Android.