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

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

Рисунок 1. Улучшение локальности кода за счет оптимизации компоновки DEX.

Требования

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

  • Jetpack Macrobenchmark 1.2.0 или выше
  • Android Gradle Plugin 8.2 или выше
  • Android Studio Iguana или выше

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

  • Поддержка R8 включена. Для вашей релизной сборки установите isMinifyEnabled = true .
  • Оптимизация макета DEX включена. В блоке baselineProfile {} файла сборки модуля приложения установите dexLayoutOptimization = true .

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

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

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

По умолчанию профиль запуска создается с помощью шаблона модуля «Генератор базовых профилей» в Android Studio. Он включает в себя взаимодействия при запуске, формирующие базовый профиль запуска. Чтобы расширить этот профиль запуска, добавив больше критически важных пользовательских сценариев (CUJ), добавьте CUJ вашего приложения в блок 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 для настройки приложения и найдите правила профиля запуска по адресу src/<variant>/generated/baselineProfiles/startup-prof.txt .

Рекомендации по созданию профилей стартапов

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

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

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

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

{% verbatim %} {% endverbatim %} {% verbatim %} {% endverbatim %}