Оптимизация Android-приложений на основе профилей (PGO)

Мы сократили время холодного запуска Android-приложения с 1,2 с до 380 мс.

Большинство приложений при первом запуске работают в самом медленном режиме компиляции. Когда пользователь только устанавливает ваше приложение, Android использует режим «только интерпретации» (interpret-only). Это замедляет запуск. Система оптимизирует код только позже, в периоды простоя.

Вы можете исправить это с помощью трехэтапного конвейера.

  1. Генерация Baseline Profiles Baseline Profiles указывают системе, какие классы нужно скомпилировать во время установки. Используйте Macrobenchmark для их создания в вашем CI-конвейере. Наши профили охватывали 12% методов, но обеспечивали 94% времени запуска.

  2. Включение переупорядочивания DEX-файлов (DEX Layout Reordering) Это всего одна строка в ваших свойствах Gradle. Она указывает R8 группировать классы, участвующие в запуске, вместе в вашем DEX-файле. Это снижает количество ошибок страниц (page faults) на 30–50%. Когда классы расположены рядом, системе требуется загружать меньше лишних данных с диска.

  3. Использование Cloud Profiles Google Play собирает профили пользователей и передает их при установке приложения новым пользователям. Это кратно увеличивает ваш прирост скорости.

Результаты нашего тестирования:

Важные советы для вашего рабочего процесса:

Используйте эти уровни вместе, чтобы создавать более быстрые приложения.

Источник: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a