Как создать профиль стартапа

Профили запуска – это подмножество профилей базовой конфигурации. Профили запуска используются системой сборки для дальнейшей оптимизации классов и методов, которые они содержат, за счет улучшения макета кода в DEX-файлах APK. При использовании профилей запуска приложение обычно запускается на 15–30 % быстрее, чем при использовании только профилей базовой конфигурации.

Подробнее о профилях запуска…

Требования

Рекомендуем использовать профили запуска со следующими инструментами:

  • Jetpack Macrobenchmark 1.2.0 или более поздней версии;
  • Плагин Android Gradle (AGP) 8.2 или более поздней версии.
  • Android Studio Iguana или более поздней версии;

Кроме того, в приложении должны быть заданы следующие настройки:

  • Включен R8. Для конечной сборки задайте значение isMinifyEnabled = true.
  • Оптимизация макета DEX включена. Эта функция доступна только в AGP 8.1 и более поздних версиях и включена по умолчанию в AGP 8.3 и более поздних версиях. Для AGP версий 8.1–8.2 в блоке baselineProfile {} файла сборки модуля приложения задайте dexLayoutOptimization = true.

Создайте профиль стартапа

Android Studio создает профиль запуска вместе с профилем базовой конфигурации, когда вы используете шаблон генератора профиля базовой конфигурации по умолчанию.

Общие шаги по созданию и генерации профиля запуска такие же, как и для создания базового профиля.

По умолчанию профиль запуска создается с помощью шаблона модуля генератора базового профиля в Android Studio. Это включает в себя взаимодействия со стартапами, которые формируют базовый профиль стартапа. Чтобы добавить в профиль запуска больше алгоритмов достижения цели, добавьте их в блок rule, установив для includeInStartupProfile значение true. Для простых приложений может быть достаточно запустить MainActivity. Для более сложных приложений рекомендуется добавить наиболее распространенные точки входа, например запуск приложения с главного экрана или переход по ссылке на контент.

В приведенном ниже фрагменте кода показан генератор профиля базовой конфигурации (по умолчанию это файл BaselineProfileGenerator.kt), который запускает приложение с главного экрана и открывает ссылку на контент. Ссылка на контент ведет непосредственно в ленту новостей, а не на главный экран приложения.

@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {

    @get:Rule
    val rule = BaselineProfileRule()

    @Test
    fun generate() {
        rule.collect(
            packageName = "com.example.app",
            includeInStartupProfile = true
        ) {
            uiAutomator {
                // Launch directly into the NEWS_FEED using startActivityIntent
                startIntent(Intent().apply {
                    setPackage(packageName)
                    setAction("com.example.app.NEWS_FEED")
                })
        }
    }
}

Запустите конфигурацию Generate Baseline Profile for app (Создать базовый профиль для приложения) и найдите правила профиля запуска в каталоге src/<variant>/generated/baselineProfiles/startup-prof.txt, где они автоматически используются AGP.

Что нужно учитывать при создании профилей запуска

Чтобы решить, какие пути пользователя следует охватить при создании профиля запуска, подумайте, с чего большинство пользователей начинают работу с приложением. Обычно это происходит на панели запуска и после входа в систему. Это также самый базовый путь профиля.

После того как вы рассмотрели первый вариант использования, перейдите к воронке запуска приложения. Во многих случаях воронки запуска приложений выглядят следующим образом:

  1. Основное действие в панели запуска
  2. Уведомления, которые запускают приложение
  3. Дополнительные действия в панели запуска

Выполняйте действия из списка сверху вниз, пока не заполните classes.dex. Чтобы охватить больше путей, переместите код из пути запуска и добавьте больше путей. Чтобы переместить код из пути запуска, изучите трассировки Perfetto во время запуска приложения и найдите длительные операции. Вы также можете использовать макротест с включенной трассировкой методов, чтобы получить полную картину вызовов методов во время запуска приложения.