Автоматически сгенерируйте профили для каждого выпуска приложения с помощью библиотеки Jetpack Macrobenchmark и BaselineProfileRule
. Мы рекомендуем использовать com.android.tools.build:gradle:8.0.0
или выше, который поставляется с улучшениями сборки при использовании Baseline Profiles.
Ниже приведены общие шаги по созданию нового базового профиля:
- Настройте модуль базового профиля.
- Определите тест JUnit, который поможет сгенерировать базовые профили.
- Добавьте критические пути пользователя (CUJ), которые вы хотите оптимизировать.
- Создайте базовый профиль.
После создания базового профиля выполните его сравнительный анализ с использованием физического устройства, чтобы измерить улучшение скорости.
Создайте новый базовый профиль с AGP 8.2 или выше
Самый простой способ создать новый базовый профиль — использовать шаблон модуля базового профиля, доступный начиная с Android Studio Iguana и Android Gradle Plugin (AGP) 8.2.
Шаблон модуля Android Studio Baseline Profile Generator автоматизирует создание нового модуля для генерации и тестирования базовых профилей. Запуск шаблона генерирует большую часть типичной конфигурации сборки, генерации базовых профилей и кода проверки. Шаблон создает код для генерации и тестирования базовых профилей для измерения запуска приложения.
Настройте модуль базового профиля
Чтобы запустить шаблон модуля Baseline Profile, выполните следующие действия:
- Выберите Файл > Новый > Новый модуль.
- Выберите шаблон Baseline Profile Generator на панели Templates и настройте его:
Рисунок 1. Шаблон модуля генератора базового профиля. Поля в шаблоне следующие:
- Target application : определяет, для какого приложения создается базовый профиль. Если в вашем проекте есть только один модуль приложения, в этом списке будет только один элемент.
- Имя модуля : желаемое имя для создаваемого модуля базового профиля.
- Имя пакета : имя пакета, которое вы хотите для модуля Baseline Profile.
- Язык : хотите ли вы, чтобы сгенерированный код был на Kotlin или Java.
- Язык конфигурации сборки : хотите ли вы использовать Kotlin Script (KTS) или Groovy для своих скриптов конфигурации сборки.
- Использовать устройство, управляемое Gradle : используете ли вы устройства, управляемые Gradle, для тестирования своего приложения.
- Нажмите Finish , и новый модуль будет создан. Если вы используете систему управления исходным кодом, вам может быть предложено добавить недавно созданные файлы модуля в систему управления исходным кодом.
Определите генератор базового профиля
Недавно созданный модуль содержит тесты для генерации и оценки базового профиля и тестирования только базового запуска приложения. Мы рекомендуем вам расширить их, включив CUJ и расширенные рабочие процессы запуска. Убедитесь, что все тесты, связанные с запуском приложения, находятся в блоке rule
с includeInStartupProfile
, установленным на true
; и наоборот, для оптимальной производительности убедитесь, что все тесты, не связанные с запуском приложения, не включены в профиль запуска. Оптимизации запуска приложения используются для определения специальной части базового профиля, называемой профилем запуска .
Это помогает поддерживать удобство, если вы абстрагируете эти CUJ за пределы сгенерированного базового профиля и кода бенчмарка, чтобы их можно было использовать для обоих. Это означает, что изменения в ваших CUJ используются последовательно.
Сгенерируйте и установите базовый профиль
Шаблон модуля Baseline Profile добавляет новую конфигурацию запуска для генерации Baseline Profile. Если вы используете варианты продукта, Android Studio создает несколько конфигураций запуска, чтобы вы могли генерировать отдельные Baseline Profiles для каждого варианта.

Когда конфигурация запуска Generate Baseline Profile завершается, она копирует сгенерированный Baseline Profile в файл src/ variant /generated/baselineProfiles/baseline-prof.txt
в модуле, который профилируется. Варианты вариантов — это либо тип сборки релиза, либо вариант сборки, включающий тип сборки релиза.
Сгенерированный базовый профиль изначально создается в build/outputs
. Полный путь определяется вариантом или разновидностью профилируемого приложения и тем, используете ли вы управляемое Gradle устройство или подключенное устройство для профилирования. Если вы используете имена, используемые кодом и конфигурациями сборки, сгенерированными шаблоном, базовый профиль создается в файле build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt
. Вам, вероятно, не придется взаимодействовать с этой версией сгенерированного базового профиля напрямую, если вы не копируете его вручную в целевые модули (не рекомендуется).
Создайте новый базовый профиль с помощью AGP 8.1
Если вы не можете использовать шаблон модуля Baseline Profile , используйте шаблон модуля Macrobenchmark и плагин Baseline Profile Gradle для создания нового Baseline Profile. Мы рекомендуем использовать эти инструменты, начиная с Android Studio Giraffe и AGP 8.1.
Ниже приведены шаги по созданию нового базового профиля с использованием шаблона модуля Macrobenchmark и плагина Gradle Baseline Profile:
- Настройте модуль Macrobenchmark в своем проекте Gradle.
- Определите новый класс с именем
BaselineProfileGenerator
:class BaselineProfileGenerator { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun startup() = baselineProfileRule.collect( packageName = "com.example.app", profileBlock = { startActivityAndWait() } ) }
Генератор может содержать взаимодействия с вашим приложением за пределами запуска приложения. Это позволяет оптимизировать производительность выполнения вашего приложения, например, прокрутку списков, запуск анимации и навигацию в
Activity
. Смотрите другие примеры тестов, которые используют@BaselineProfileRule
для улучшения критических пользовательских путей. Добавьте плагин Baseline Profile Gradle (
libs.plugins.androidx.baselineprofile
). Плагин упрощает создание Baseline Profiles и их поддержку в будущем.Чтобы сгенерировать базовый профиль, запустите задачи Gradle
:app:generateBaselineProfile
или:app:generate Variant BaselineProfile
в терминале.Запустите генератор как инструментированный тест на рутированном физическом устройстве, эмуляторе или Gradle Managed Device . Если вы используете Gradle Managed Device, установите
aosp
какsystemImageSource
, поскольку вам нужен root-доступ для генератора Baseline Profile.В конце задачи генерации базовый профиль копируется в
app/src/ variant /generated/baselineProfiles
.
Создать новый базовый профиль без шаблонов
Мы рекомендуем создать Baseline Profile с помощью шаблона модуля Android Studio Baseline Profile (предпочтительно) или шаблона Macrobenchmark , но вы также можете использовать плагин Baseline Profile Gradle сам по себе. Чтобы узнать больше о плагине Baseline Profile Gradle, см. раздел Configure your Baseline Profile generation .
Вот как создать базовый профиль, используя плагин Baseline Profile Gradle напрямую:
- Создайте новый модуль
com.android.test
, например,:baseline-profile
. Настройте файл
build.gradle.kts
для:baseline-profile
:- Примените плагин
androidx.baselineprofile
. - Убедитесь, что
targetProjectPath
указывает на модуль:app
. - При желании добавьте устройство Gradle-managed device (GMD) . В следующем примере это
pixel6Api31
. Если не указано иное, плагин использует подключенное устройство, эмулированное или физическое. - Примените нужную конфигурацию, как показано в следующем примере.
Котлин
plugins { id("com.android.test") id("androidx.baselineprofile") } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath = ":app" // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices += "pixel6Api31" // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices = false }
Круто
plugins { id 'com.android.test' id 'androidx.baselineprofile' } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath ':app' // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device 'Pixel 6' apiLevel 31 systemImageSource 'aosp' } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices ['pixel6Api31'] // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices false }
- Примените плагин
Создайте тест Baseline Profile в тестовом модуле
:baseline-profile
. Следующий пример — тест, который запускает приложение и ждет простоя.Котлин
class BaselineProfileGenerator { @get:Rule val baselineRule = BaselineProfileRule() @Test fun startupBaselineProfile() { baselineRule.collect("com.myapp") { startActivityAndWait() } } }
Ява
public class BaselineProfileGenerator { @Rule Public BaselineProfileRule baselineRule = new BaselineProfileRule(); @Test Public void startupBaselineProfile() { baselineRule.collect( "com.myapp", (scope -> { scope.startActivityAndWait(); Return Unit.INSTANCE; }) ) } }
Обновите файл
build.gradle.kts
в модуле app, например:app
.- Примените плагин
androidx.baselineprofile
. - Добавьте зависимость
baselineProfile
к модулю:baseline-profile
.
Котлин
plugins { id("com.android.application") id("androidx.baselineprofile") } android { // There are no changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile(project(":baseline-profile")) }
Круто
plugins { id 'com.android.application' id 'androidx.baselineprofile' } android { // No changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile ':baseline-profile' }
- Примените плагин
Создайте профиль, выполнив задачи Gradle
:app:generateBaselineProfile
или:app:generate Variant BaselineProfile
.В конце задачи генерации базовый профиль копируется в
app/src/ variant /generated/baselineProfiles
.
Создайте новый базовый профиль с AGP 7.3-7.4
Сгенерировать базовые профили можно с помощью AGP 7.3-7.4, но мы настоятельно рекомендуем выполнить обновление как минимум до AGP 8.1, чтобы вы могли использовать плагин Gradle Baseline Profile и его новейшие функции.
Если вам необходимо создать базовые профили с AGP 7.3-7.4, шаги будут такими же, как и для AGP 8.1 , за следующими исключениями:
- Не добавляйте плагин Baseline Profile Gradle.
- Для генерации базовых профилей выполните задачу Gradle
./gradlew [emulator name][flavor][build type]AndroidTest
. Например,./gradlew :benchmark:pixel6Api31BenchmarkAndroidTest
. - Вам необходимо вручную применить сгенерированные правила базового профиля к вашему коду .
Применяйте созданные правила вручную
Генератор базового профиля создает текстовый файл в формате Human Readable Format (HRF) на устройстве и копирует его на хост-компьютер. Чтобы применить сгенерированный профиль к вашему коду, выполните следующие действия:
Найдите файл HRF в папке сборки модуля, в котором вы создаете профиль:
[module]/build/outputs/managed_device_android_test_additional_output/[device]
.Профили следуют шаблону именования
[class name]-[test method name]-baseline-prof.txt
, который выглядит следующим образом:BaselineProfileGenerator-startup-baseline-prof.txt
.Скопируйте сгенерированный профиль в
src/main/
и переименуйте файл вbaseline-prof.txt
.Добавьте зависимость к библиотеке ProfileInstaller в файле
build.gradle.kts
вашего приложения, чтобы включить локальную компиляцию Baseline Profile, где Cloud Profiles недоступны. Это единственный способ локально загрузить Baseline Profile.dependencies { implementation("androidx.profileinstaller:profileinstaller:1.4.1") }
Создайте производственную версию вашего приложения, пока применяемые правила HRF компилируются в двоичную форму и включаются в APK или AAB. Затем распространяйте ваше приложение как обычно.
Сравнительный анализ базового профиля
Чтобы протестировать свой Baseline Profile, создайте новую конфигурацию Android Instrumented Test Run из действия gutter, которое выполняет бенчмарки, определенные в файле StartupBenchmarks.kt
или StartupBencharks.java
. Чтобы узнать больше о тестировании бенчмарков, см. Создание класса Macrobenchmark и Автоматизация измерений с помощью библиотеки Macrobenchmark .

При запуске этого в Android Studio выходные данные сборки содержат сведения об улучшениях скорости, которые обеспечивает базовый профиль:
StartupBenchmarks_startupCompilationBaselineProfiles timeToInitialDisplayMs min 161.8, median 178.9, max 194.6 StartupBenchmarks_startupCompilationNone timeToInitialDisplayMs min 184.7, median 196.9, max 202.9
Захватите все необходимые пути кода
Двумя ключевыми показателями для измерения времени запуска приложения являются следующие:
- Время до начального отображения (TTID)
- Время, необходимое для отображения первого кадра пользовательского интерфейса приложения.
- Время до полного отображения (TTFD)
- TTID плюс время отображения контента, который загружается асинхронно после отображения начального кадра.
TTFD сообщается после вызова метода reportFullyDrawn()
ComponentActivity
. Если reportFullyDrawn()
никогда не вызывается, вместо этого сообщается TTID. Возможно, вам придется отложить вызов reportFullyDrawn()
до завершения асинхронной загрузки. Например, если пользовательский интерфейс содержит динамический список, такой как RecyclerView
или lazy list , список может быть заполнен фоновой задачей, которая завершается после того, как список впервые отрисован и, следовательно, после того, как пользовательский интерфейс помечен как полностью отрисованный. В таких случаях код, который выполняется после того, как пользовательский интерфейс достигает полностью отрисованного состояния, не включается в базовый профиль.
Чтобы включить заполнение списка как часть вашего Baseline Profile, получите FullyDrawnReporter
с помощью getFullyDrawnReporter()
и добавьте к нему репортер в коде вашего приложения. Освободите репортер, как только фоновая задача завершит заполнение списка. FullyDrawnReporter
не вызывает метод reportFullyDrawn()
пока все репортеры не будут освобождены. При этом Baseline Profile включает пути кода, необходимые для заполнения списка. Это не меняет поведение приложения для пользователя, но позволяет Baseline Profile включать все необходимые пути кода.
Если ваше приложение использует Jetpack Compose , используйте следующие API для указания полностью отрисованного состояния:
-
ReportDrawn
указывает на то, что ваш компонуемый объект сразу готов к взаимодействию. -
ReportDrawnWhen
принимает предикат, напримерlist.count > 0
, чтобы указать, когда ваш компонуемый объект готов к взаимодействию. -
ReportDrawnAfter
принимает метод приостановки, который после завершения указывает на то, что ваш компонуемый объект готов к взаимодействию.
Рекомендовано для вас
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Захват макро-бенчмарк-показателей
- Написать макробенчмарк
- Библиотека JankStats
Автоматически сгенерируйте профили для каждого выпуска приложения с помощью библиотеки Jetpack Macrobenchmark и BaselineProfileRule
. Мы рекомендуем использовать com.android.tools.build:gradle:8.0.0
или выше, который поставляется с улучшениями сборки при использовании Baseline Profiles.
Ниже приведены общие шаги по созданию нового базового профиля:
- Настройте модуль базового профиля.
- Определите тест JUnit, который поможет сгенерировать базовые профили.
- Добавьте критические пути пользователя (CUJ), которые вы хотите оптимизировать.
- Создайте базовый профиль.
После создания базового профиля выполните его сравнительный анализ с использованием физического устройства, чтобы измерить улучшение скорости.
Создайте новый базовый профиль с AGP 8.2 или выше
Самый простой способ создать новый базовый профиль — использовать шаблон модуля базового профиля, доступный начиная с Android Studio Iguana и Android Gradle Plugin (AGP) 8.2.
Шаблон модуля Android Studio Baseline Profile Generator автоматизирует создание нового модуля для генерации и тестирования базовых профилей. Запуск шаблона генерирует большую часть типичной конфигурации сборки, генерации базовых профилей и кода проверки. Шаблон создает код для генерации и тестирования базовых профилей для измерения запуска приложения.
Настройте модуль базового профиля
Чтобы запустить шаблон модуля Baseline Profile, выполните следующие действия:
- Выберите Файл > Новый > Новый модуль.
- Выберите шаблон Baseline Profile Generator на панели Templates и настройте его:
Рисунок 1. Шаблон модуля генератора базового профиля. Поля в шаблоне следующие:
- Target application : определяет, для какого приложения создается базовый профиль. Если в вашем проекте есть только один модуль приложения, в этом списке будет только один элемент.
- Имя модуля : желаемое имя для создаваемого модуля базового профиля.
- Имя пакета : имя пакета, которое вы хотите для модуля Baseline Profile.
- Язык : хотите ли вы, чтобы сгенерированный код был на Kotlin или Java.
- Язык конфигурации сборки : хотите ли вы использовать Kotlin Script (KTS) или Groovy для своих скриптов конфигурации сборки.
- Использовать устройство, управляемое Gradle : используете ли вы устройства, управляемые Gradle, для тестирования своего приложения.
- Нажмите Finish , и новый модуль будет создан. Если вы используете систему управления исходным кодом, вам может быть предложено добавить недавно созданные файлы модуля в систему управления исходным кодом.
Определите генератор базового профиля
Недавно созданный модуль содержит тесты для генерации и оценки базового профиля и тестирования только базового запуска приложения. Мы рекомендуем вам расширить их, включив CUJ и расширенные рабочие процессы запуска. Убедитесь, что все тесты, связанные с запуском приложения, находятся в блоке rule
с includeInStartupProfile
, установленным на true
; и наоборот, для оптимальной производительности убедитесь, что все тесты, не связанные с запуском приложения, не включены в профиль запуска. Оптимизации запуска приложения используются для определения специальной части базового профиля, называемой профилем запуска .
Это помогает поддерживать удобство, если вы абстрагируете эти CUJ за пределы сгенерированного базового профиля и кода бенчмарка, чтобы их можно было использовать для обоих. Это означает, что изменения в ваших CUJ используются последовательно.
Сгенерируйте и установите базовый профиль
Шаблон модуля Baseline Profile добавляет новую конфигурацию запуска для генерации Baseline Profile. Если вы используете варианты продукта, Android Studio создает несколько конфигураций запуска, чтобы вы могли генерировать отдельные Baseline Profiles для каждого варианта.

Когда конфигурация запуска Generate Baseline Profile завершается, она копирует сгенерированный Baseline Profile в файл src/ variant /generated/baselineProfiles/baseline-prof.txt
в модуле, который профилируется. Варианты вариантов — это либо тип сборки релиза, либо вариант сборки, включающий тип сборки релиза.
Сгенерированный базовый профиль изначально создается в build/outputs
. Полный путь определяется вариантом или разновидностью профилируемого приложения и тем, используете ли вы управляемое Gradle устройство или подключенное устройство для профилирования. Если вы используете имена, используемые кодом и конфигурациями сборки, сгенерированными шаблоном, базовый профиль создается в файле build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt
. Вам, вероятно, не придется взаимодействовать с этой версией сгенерированного базового профиля напрямую, если вы не копируете его вручную в целевые модули (не рекомендуется).
Создайте новый базовый профиль с помощью AGP 8.1
Если вы не можете использовать шаблон модуля Baseline Profile , используйте шаблон модуля Macrobenchmark и плагин Baseline Profile Gradle для создания нового Baseline Profile. Мы рекомендуем использовать эти инструменты, начиная с Android Studio Giraffe и AGP 8.1.
Ниже приведены шаги по созданию нового базового профиля с использованием шаблона модуля Macrobenchmark и плагина Gradle Baseline Profile:
- Настройте модуль Macrobenchmark в своем проекте Gradle.
- Определите новый класс с именем
BaselineProfileGenerator
:class BaselineProfileGenerator { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun startup() = baselineProfileRule.collect( packageName = "com.example.app", profileBlock = { startActivityAndWait() } ) }
Генератор может содержать взаимодействия с вашим приложением за пределами запуска приложения. Это позволяет оптимизировать производительность выполнения вашего приложения, например, прокрутку списков, запуск анимации и навигацию в
Activity
. Смотрите другие примеры тестов, которые используют@BaselineProfileRule
для улучшения критических пользовательских путей. Добавьте плагин Baseline Profile Gradle (
libs.plugins.androidx.baselineprofile
). Плагин упрощает создание Baseline Profiles и их поддержку в будущем.Чтобы сгенерировать базовый профиль, запустите задачи Gradle
:app:generateBaselineProfile
или:app:generate Variant BaselineProfile
в терминале.Запустите генератор как инструментированный тест на рутированном физическом устройстве, эмуляторе или Gradle Managed Device . Если вы используете Gradle Managed Device, установите
aosp
какsystemImageSource
, поскольку вам нужен root-доступ для генератора Baseline Profile.В конце задачи генерации базовый профиль копируется в
app/src/ variant /generated/baselineProfiles
.
Создать новый базовый профиль без шаблонов
Мы рекомендуем создать Baseline Profile с помощью шаблона модуля Android Studio Baseline Profile (предпочтительно) или шаблона Macrobenchmark , но вы также можете использовать плагин Baseline Profile Gradle сам по себе. Чтобы узнать больше о плагине Baseline Profile Gradle, см. раздел Configure your Baseline Profile generation .
Вот как создать базовый профиль, используя плагин Baseline Profile Gradle напрямую:
- Создайте новый модуль
com.android.test
, например,:baseline-profile
. Настройте файл
build.gradle.kts
для:baseline-profile
:- Примените плагин
androidx.baselineprofile
. - Убедитесь, что
targetProjectPath
указывает на модуль:app
. - При желании добавьте устройство Gradle-managed device (GMD) . В следующем примере это
pixel6Api31
. Если не указано иное, плагин использует подключенное устройство, эмулированное или физическое. - Примените нужную конфигурацию, как показано в следующем примере.
Котлин
plugins { id("com.android.test") id("androidx.baselineprofile") } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath = ":app" // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices += "pixel6Api31" // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices = false }
Круто
plugins { id 'com.android.test' id 'androidx.baselineprofile' } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath ':app' // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device 'Pixel 6' apiLevel 31 systemImageSource 'aosp' } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices ['pixel6Api31'] // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices false }
- Примените плагин
Создайте тест Baseline Profile в тестовом модуле
:baseline-profile
. Следующий пример — тест, который запускает приложение и ждет простоя.Котлин
class BaselineProfileGenerator { @get:Rule val baselineRule = BaselineProfileRule() @Test fun startupBaselineProfile() { baselineRule.collect("com.myapp") { startActivityAndWait() } } }
Ява
public class BaselineProfileGenerator { @Rule Public BaselineProfileRule baselineRule = new BaselineProfileRule(); @Test Public void startupBaselineProfile() { baselineRule.collect( "com.myapp", (scope -> { scope.startActivityAndWait(); Return Unit.INSTANCE; }) ) } }
Обновите файл
build.gradle.kts
в модуле app, например:app
.- Примените плагин
androidx.baselineprofile
. - Добавьте зависимость
baselineProfile
к модулю:baseline-profile
.
Котлин
plugins { id("com.android.application") id("androidx.baselineprofile") } android { // There are no changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile(project(":baseline-profile")) }
Круто
plugins { id 'com.android.application' id 'androidx.baselineprofile' } android { // No changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile ':baseline-profile' }
- Примените плагин
Создайте профиль, выполнив задачи Gradle
:app:generateBaselineProfile
или:app:generate Variant BaselineProfile
.В конце задачи генерации базовый профиль копируется в
app/src/ variant /generated/baselineProfiles
.
Создайте новый базовый профиль с AGP 7.3-7.4
Сгенерировать базовые профили можно с помощью AGP 7.3-7.4, но мы настоятельно рекомендуем выполнить обновление как минимум до AGP 8.1, чтобы вы могли использовать плагин Gradle Baseline Profile и его новейшие функции.
Если вам необходимо создать базовые профили с AGP 7.3-7.4, шаги будут такими же, как и для AGP 8.1 , за следующими исключениями:
- Не добавляйте плагин Baseline Profile Gradle.
- Для генерации базовых профилей выполните задачу Gradle
./gradlew [emulator name][flavor][build type]AndroidTest
. Например,./gradlew :benchmark:pixel6Api31BenchmarkAndroidTest
. - Вам необходимо вручную применить сгенерированные правила базового профиля к вашему коду .
Применяйте созданные правила вручную
Генератор базового профиля создает текстовый файл в формате Human Readable Format (HRF) на устройстве и копирует его на хост-компьютер. Чтобы применить сгенерированный профиль к вашему коду, выполните следующие действия:
Найдите файл HRF в папке сборки модуля, в котором вы создаете профиль:
[module]/build/outputs/managed_device_android_test_additional_output/[device]
.Профили следуют шаблону именования
[class name]-[test method name]-baseline-prof.txt
, который выглядит следующим образом:BaselineProfileGenerator-startup-baseline-prof.txt
.Скопируйте сгенерированный профиль в
src/main/
и переименуйте файл вbaseline-prof.txt
.Добавьте зависимость к библиотеке ProfileInstaller в файле
build.gradle.kts
вашего приложения, чтобы включить локальную компиляцию Baseline Profile, где Cloud Profiles недоступны. Это единственный способ локально загрузить Baseline Profile.dependencies { implementation("androidx.profileinstaller:profileinstaller:1.4.1") }
Создайте производственную версию вашего приложения, пока применяемые правила HRF компилируются в двоичную форму и включаются в APK или AAB. Затем распространяйте ваше приложение как обычно.
Сравнительный анализ базового профиля
Чтобы протестировать свой Baseline Profile, создайте новую конфигурацию Android Instrumented Test Run из действия gutter, которое выполняет бенчмарки, определенные в файле StartupBenchmarks.kt
или StartupBencharks.java
. Чтобы узнать больше о тестировании бенчмарков, см. Создание класса Macrobenchmark и Автоматизация измерений с помощью библиотеки Macrobenchmark .

При запуске этого в Android Studio выходные данные сборки содержат сведения об улучшениях скорости, которые обеспечивает базовый профиль:
StartupBenchmarks_startupCompilationBaselineProfiles timeToInitialDisplayMs min 161.8, median 178.9, max 194.6 StartupBenchmarks_startupCompilationNone timeToInitialDisplayMs min 184.7, median 196.9, max 202.9
Захватите все необходимые пути кода
Двумя ключевыми показателями для измерения времени запуска приложения являются следующие:
- Время до начального отображения (TTID)
- Время, необходимое для отображения первого кадра пользовательского интерфейса приложения.
- Время до полного отображения (TTFD)
- TTID плюс время отображения контента, который загружается асинхронно после отображения начального кадра.
TTFD сообщается после вызова метода reportFullyDrawn()
ComponentActivity
. Если reportFullyDrawn()
никогда не вызывается, вместо этого сообщается TTID. Возможно, вам придется отложить вызов reportFullyDrawn()
до завершения асинхронной загрузки. Например, если пользовательский интерфейс содержит динамический список, такой как RecyclerView
или lazy list , список может быть заполнен фоновой задачей, которая завершается после того, как список впервые отрисован и, следовательно, после того, как пользовательский интерфейс помечен как полностью отрисованный. В таких случаях код, который выполняется после того, как пользовательский интерфейс достигает полностью отрисованного состояния, не включается в базовый профиль.
Чтобы включить заполнение списка как часть вашего Baseline Profile, получите FullyDrawnReporter
с помощью getFullyDrawnReporter()
и добавьте к нему репортер в коде вашего приложения. Освободите репортер, как только фоновая задача завершит заполнение списка. FullyDrawnReporter
не вызывает метод reportFullyDrawn()
пока все репортеры не будут освобождены. При этом Baseline Profile включает пути кода, необходимые для заполнения списка. Это не меняет поведение приложения для пользователя, но позволяет Baseline Profile включать все необходимые пути кода.
Если ваше приложение использует Jetpack Compose , используйте следующие API для указания полностью отрисованного состояния:
-
ReportDrawn
указывает на то, что ваш компонуемый объект сразу готов к взаимодействию. -
ReportDrawnWhen
принимает предикат, напримерlist.count > 0
, чтобы указать, когда ваш компонуемый объект готов к взаимодействию. -
ReportDrawnAfter
принимает метод приостановки, который после завершения указывает на то, что ваш компонуемый объект готов к взаимодействию.
Рекомендовано для вас
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Захват макро-бенчмарк-показателей
- Написать макробенчмарк
- Библиотека JankStats
Автоматически сгенерируйте профили для каждого выпуска приложения с помощью библиотеки Jetpack Macrobenchmark и BaselineProfileRule
. Мы рекомендуем использовать com.android.tools.build:gradle:8.0.0
или выше, который поставляется с улучшениями сборки при использовании Baseline Profiles.
Ниже приведены общие шаги по созданию нового базового профиля:
- Настройте модуль базового профиля.
- Определите тест JUnit, который поможет сгенерировать базовые профили.
- Добавьте критические пути пользователя (CUJ), которые вы хотите оптимизировать.
- Создайте базовый профиль.
После создания базового профиля выполните его сравнительный анализ с использованием физического устройства, чтобы измерить улучшение скорости.
Создайте новый базовый профиль с AGP 8.2 или выше
Самый простой способ создать новый базовый профиль — использовать шаблон модуля базового профиля, доступный начиная с Android Studio Iguana и Android Gradle Plugin (AGP) 8.2.
Шаблон модуля Android Studio Baseline Profile Generator автоматизирует создание нового модуля для генерации и тестирования базовых профилей. Запуск шаблона генерирует большую часть типичной конфигурации сборки, генерации базовых профилей и кода проверки. Шаблон создает код для генерации и тестирования базовых профилей для измерения запуска приложения.
Настройте модуль базового профиля
Чтобы запустить шаблон модуля Baseline Profile, выполните следующие действия:
- Выберите Файл > Новый > Новый модуль.
- Выберите шаблон Baseline Profile Generator на панели Templates и настройте его:
Рисунок 1. Шаблон модуля генератора базового профиля. Поля в шаблоне следующие:
- Target application : определяет, для какого приложения создается базовый профиль. Если в вашем проекте есть только один модуль приложения, в этом списке будет только один элемент.
- Имя модуля : желаемое имя для создаваемого модуля базового профиля.
- Имя пакета : имя пакета, которое вы хотите для модуля Baseline Profile.
- Язык : хотите ли вы, чтобы сгенерированный код был на Kotlin или Java.
- Язык конфигурации сборки : хотите ли вы использовать Kotlin Script (KTS) или Groovy для своих скриптов конфигурации сборки.
- Использовать устройство, управляемое Gradle : используете ли вы устройства, управляемые Gradle, для тестирования своего приложения.
- Нажмите Finish , и новый модуль будет создан. Если вы используете систему управления исходным кодом, вам может быть предложено добавить недавно созданные файлы модуля в систему управления исходным кодом.
Определите генератор базового профиля
Недавно созданный модуль содержит тесты для генерации и оценки базового профиля и тестирования только базового запуска приложения. Мы рекомендуем вам расширить их, включив CUJ и расширенные рабочие процессы запуска. Убедитесь, что все тесты, связанные с запуском приложения, находятся в блоке rule
с includeInStartupProfile
, установленным на true
; и наоборот, для оптимальной производительности убедитесь, что все тесты, не связанные с запуском приложения, не включены в профиль запуска. Оптимизации запуска приложения используются для определения специальной части базового профиля, называемой профилем запуска .
Это помогает поддерживать удобство, если вы абстрагируете эти CUJ за пределы сгенерированного базового профиля и кода бенчмарка, чтобы их можно было использовать для обоих. Это означает, что изменения в ваших CUJ используются последовательно.
Сгенерируйте и установите базовый профиль
Шаблон модуля Baseline Profile добавляет новую конфигурацию запуска для генерации Baseline Profile. Если вы используете варианты продукта, Android Studio создает несколько конфигураций запуска, чтобы вы могли генерировать отдельные Baseline Profiles для каждого варианта.

Когда конфигурация запуска Generate Baseline Profile завершается, она копирует сгенерированный Baseline Profile в файл src/ variant /generated/baselineProfiles/baseline-prof.txt
в модуле, который профилируется. Варианты вариантов — это либо тип сборки релиза, либо вариант сборки, включающий тип сборки релиза.
Сгенерированный базовый профиль изначально создается в build/outputs
. Полный путь определяется вариантом или разновидностью профилируемого приложения и тем, используете ли вы управляемое Gradle устройство или подключенное устройство для профилирования. Если вы используете имена, используемые кодом и конфигурациями сборки, сгенерированными шаблоном, базовый профиль создается в файле build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt
. Вам, вероятно, не придется взаимодействовать с этой версией сгенерированного базового профиля напрямую, если вы не копируете его вручную в целевые модули (не рекомендуется).
Создайте новый базовый профиль с помощью AGP 8.1
Если вы не можете использовать шаблон модуля Baseline Profile , используйте шаблон модуля Macrobenchmark и плагин Baseline Profile Gradle для создания нового Baseline Profile. Мы рекомендуем использовать эти инструменты, начиная с Android Studio Giraffe и AGP 8.1.
Ниже приведены шаги по созданию нового базового профиля с использованием шаблона модуля Macrobenchmark и плагина Gradle Baseline Profile:
- Настройте модуль Macrobenchmark в своем проекте Gradle.
- Определите новый класс под названием
BaselineProfileGenerator
:class BaselineProfileGenerator { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun startup() = baselineProfileRule.collect( packageName = "com.example.app", profileBlock = { startActivityAndWait() } ) }
Генератор может содержать взаимодействие с вашим приложением помимо запуска приложений. Это позволяет оптимизировать производительность времени выполнения вашего приложения, например, списки прокрутки, запуск анимации и навигация в рамках
Activity
. См. Другие примеры тестов, которые используют@BaselineProfileRule
для улучшения критических поездок пользователей. Добавьте плагин базового профиля Gradle (
libs.plugins.androidx.baselineprofile
). Плагин облегчает создание базовых профилей и поддержание их в будущем.Чтобы сгенерировать базовый профиль, запустите
:app:generateBaselineProfile
или:app:generate Variant BaselineProfile
Gradle Задачи в терминале.Запустите генератор в качестве инструментального теста на корневом физическом устройстве, эмуляторе или управляемом устройстве Gradle . Если вы используете управляемое устройство Gradle, установите
aosp
в качествеsystemImageSource
, потому что вам нужен корневой доступ для базового генератора профиля.В конце задачи генерации базовый профиль копируется в
app/src/ variant /generated/baselineProfiles
.
Создать новый базовый профиль без шаблонов
Мы рекомендуем создать базовый профиль, используя шаблон базового профиля Android Studio (предпочтительный) или шаблон Macrobenchmark , но вы также можете самостоятельно использовать плагин Gradle Basine Profile. Чтобы узнать больше о плагине базового профиля Gradle, см . Настройте генерацию базового профиля .
Вот как создать базовый профиль, используя плагин базового профиля Gradle напрямую:
- Создайте новый модуль
com.android.test
-например:baseline-profile
. Настройте файл
build.gradle.kts
для:baseline-profile
:- Примените плагин
androidx.baselineprofile
. - Убедитесь, что
targetProjectPath
указывает на:app
. - Необязательно, добавьте устройство, управляемое градем (GMD) . В следующем примере это
pixel6Api31
. Если не указано, плагин использует подключенное устройство, либо эмулированное, либо физическое. - Примените нужную конфигурацию, как показано в следующем примере.
Котлин
plugins { id("com.android.test") id("androidx.baselineprofile") } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath = ":app" // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices += "pixel6Api31" // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices = false }
Круто
plugins { id 'com.android.test' id 'androidx.baselineprofile' } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath ':app' // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device 'Pixel 6' apiLevel 31 systemImageSource 'aosp' } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices ['pixel6Api31'] // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices false }
- Примените плагин
Создайте базовый тест профиля в
:baseline-profile
тестовой модуле. Следующий пример - тест, который запускает приложение и ожидает простоя.Котлин
class BaselineProfileGenerator { @get:Rule val baselineRule = BaselineProfileRule() @Test fun startupBaselineProfile() { baselineRule.collect("com.myapp") { startActivityAndWait() } } }
Ява
public class BaselineProfileGenerator { @Rule Public BaselineProfileRule baselineRule = new BaselineProfileRule(); @Test Public void startupBaselineProfile() { baselineRule.collect( "com.myapp", (scope -> { scope.startActivityAndWait(); Return Unit.INSTANCE; }) ) } }
Обновите файл
build.gradle.kts
в модуле приложения, например:app
.- Примените плагин
androidx.baselineprofile
. - Добавьте
baselineProfile
зависимость в модуле:baseline-profile
.
Котлин
plugins { id("com.android.application") id("androidx.baselineprofile") } android { // There are no changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile(project(":baseline-profile")) }
Круто
plugins { id 'com.android.application' id 'androidx.baselineprofile' } android { // No changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile ':baseline-profile' }
- Примените плагин
Сгенерируйте профиль, выполнив
:app:generateBaselineProfile
или:app:generate Variant BaselineProfile
GRADLE.В конце задачи генерации базовый профиль копируется в
app/src/ variant /generated/baselineProfiles
.
Создайте новый базовый профиль с AGP 7.3-7.4
Можно сгенерировать базовые профили с AGP 7.3-7.4, но мы настоятельно рекомендуем обновить как минимум до AGP 8.1, чтобы вы могли использовать плагин Gradle Baseline и его последние функции.
Если вам нужно создать базовые профили с AGP 7.3-7.4, шаги совпадают с шагами для AGP 8.1 , за следующими исключениями:
- Не добавляйте плагин базового профиля Gradle.
- Чтобы сгенерировать базовые профили, выполните задачу Gradle
./gradlew [emulator name][flavor][build type]AndroidTest
. Например,./gradlew :benchmark:pixel6Api31BenchmarkAndroidTest
. - Вы должны вручную применить сгенерированные правила базового профиля к вашему коду .
Применять сгенерированные правила вручную
Генератор базового профиля создает текстовый файл для читаемого формата человека (HRF) на устройстве и копирует его на вашу хост -машину. Чтобы применить сгенерированный профиль к вашему коду, выполните следующие действия:
Найдите файл HRF в папке сборки модуля
[module]/build/outputs/managed_device_android_test_additional_output/[device]
Профили следуют за
[class name]-[test method name]-baseline-prof.txt
именование, которое выглядит следующим образом:BaselineProfileGenerator-startup-baseline-prof.txt
.Скопируйте сгенерированный профиль в
src/main/
и переименуйте файл вbaseline-prof.txt
.Добавьте зависимость в библиотеку ProfileInstaller в файле вашего приложения
build.gradle.kts
, чтобы включить локальную базовую компиляцию профиля, где облачные профили недоступны. Это единственный способ обосторить базовый профиль локально.dependencies { implementation("androidx.profileinstaller:profileinstaller:1.4.1") }
Создайте производственную версию вашего приложения, в то время как прикладные правила HRF собираются в двоичную форму и включены в APK или AAB. Затем распространите свое приложение как обычно.
Оценка базового профиля
Чтобы оценить свой базовый профиль, создайте новую конфигурацию Android -инструментального тестового запуска из действия Gutter, которая выполняет тесты, определенные в файле StartupBenchmarks.kt
или StartupBencharks.java
. Чтобы узнать больше о тестировании эталона, см. Создайте класс Macrobenchmark и автоматизируйте измерение с библиотекой Macrobenchmark .

Когда вы запускаете это в Android Studio, выходной выход содержит подробную информацию о улучшениях скорости, которые предоставляет базовый профиль:
StartupBenchmarks_startupCompilationBaselineProfiles timeToInitialDisplayMs min 161.8, median 178.9, max 194.6 StartupBenchmarks_startupCompilationNone timeToInitialDisplayMs min 184.7, median 196.9, max 202.9
Захватить все необходимые пути кода
Два ключевых показателя для измерения времени запуска приложений следующие:
- Время до начального отображения (TTID)
- Время, необходимое для отображения первого кадра пользовательского интерфейса приложения.
- Время до полного отображения (TTFD)
- TTID плюс время для отображения контента, которое загружается асинхронно после отображения начальной кадры.
TTFD сообщается, как только называется метод ComponentActivity
. Если reportFullyDrawn()
reportFullyDrawn()
не вызывается, вместо этого сообщается о TTID. Возможно, вам придется отложить при вызове reportFullyDrawn()
до тех пор, пока не будет завершена асинхронная нагрузка. Например, если пользовательский интерфейс содержит динамический список, такой как RecyclerView
или Lazy List , список может быть заполнен фоновой задачей, которая завершается после того, как список сначала нарисован и, следовательно, после того, как пользовательский интерфейс отмечен как полностью нарисованный. В таких случаях код, который работает после того, как пользовательский интерфейс достигает полностью нарисованного состояния, не включен в базовый профиль.
Чтобы включить популяцию списка как часть вашего базового профиля, получите FullyDrawnReporter
, используя getFullyDrawnReporter()
и добавьте в него репортер в код вашего приложения. Отпустите репортер, как только фоновая задача заполняет заполнение списка. FullyDrawnReporter
не вызывает reportFullyDrawn()
, пока все репортеры не будут выпущены. При этом базовый профиль включает в себя пути кода, необходимые для заполнения списка. Это не меняет поведение приложения для пользователя, но позволяет базовому профилю включать все необходимые пути кода.
Если ваше приложение использует JetPack Compose , используйте следующие API, чтобы указать полностью нарисованное состояние:
-
ReportDrawn
указывает, что ваш композитный сразу же готов к взаимодействию. -
ReportDrawnWhen
когда требуется предикат, такой какlist.count > 0
, чтобы указать, когда ваш композитный доступ готов к взаимодействию. -
ReportDrawnAfter
принимает приостановленный метод, который, когда он завершается, указывает, что ваш композитный готов к взаимодействию.
Рекомендовано для вас
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Захват метрики Macrobenchmark
- Напишите Macrobenchmark
- Библиотека Jankstats
Автоматически генерируйте профили для каждого выпуска приложения, используя библиотеку JetPack Macrobenchmark и BaselineProfileRule
. Мы рекомендуем вам использовать com.android.tools.build:gradle:8.0.0
или выше, что сопровождается улучшением сборки при использовании базовых профилей.
Это общие шаги для создания нового базового профиля:
- Установите модуль базового профиля.
- Определите тест JUNIT, который помогает генерировать базовые профили.
- Добавьте критические поездки пользователей (CUJS), которые вы хотите оптимизировать.
- Создайте базовый профиль.
После того, как вы генерируете базовый профиль, сравните его, используя физическое устройство для измерения улучшения скорости.
Создайте новый базовый профиль с AGP 8.2 или выше
Самый простой способ создания нового базового профиля - использовать шаблон модуля базового профиля, доступный начинающий Android Studio Iguana и Android Gradle Plugin (AGP) 8.2.
Шаблон базового модуля базового профиля Android Studio автоматизирует создание нового модуля для создания и сравнительных базовых профилей. Запуск шаблона генерирует большую часть типичной конфигурации сборки, базового генерации профиля и кода проверки. Шаблон создает код для создания и сравнительного базового профилей для измерения запуска приложения.
Настройка модуля базового профиля
Чтобы запустить шаблон модуля базового профиля, выполните следующие действия:
- Выберите Файл> Новый> Новый модуль
- Выберите шаблон генератора базового профиля на панели шаблонов и настройте его:
Рисунок 1. Шаблон модуля базового профиля. Поля в шаблоне следующие:
- Целевое приложение : определяет, какое приложение генерируется базовым профилем. Если в вашем проекте есть только один модуль приложения, в этом списке есть только один элемент.
- Имя модуля : имя, которое вы хотите для создания модуля базового профиля.
- Имя пакета : имя пакета, которое вы хотите для базового модуля профиля.
- Язык : хотите ли вы, чтобы сгенерированный код был Kotlin или Java.
- Строите язык конфигурации : хотите ли вы использовать скрипт Kotlin (KTS) или Groovy для ваших сценариев конфигурации сборки.
- Используйте устройство, управляемое Gradle : используете ли вы устройства, управляемые Gradle, для тестирования вашего приложения.
- Нажмите «Закончить» , и новый модуль создан. Если вы используете управление источником, вам может быть предложено добавить вновь созданные файлы модуля в управление источником.
Определите генератор базового профиля
Недавно созданный модуль содержит тесты как для создания, так и для сравнения базового профиля и тестирования только базового запуска приложения. Мы рекомендуем вам увеличить их, чтобы включить Cujs и Advanced Startup Workflows. Убедитесь, что любые тесты, связанные со стартапом приложений, находятся в блоке rule
с includeInStartupProfile
, установленным true
; И наоборот, для оптимальной производительности убедитесь, что любые тесты, не связанные с запуском приложений, не включены в профиль запуска. Оптимизация запуска приложений используется для определения специальной части базового профиля, называемого профилем запуска .
Это помогает в обслуживаемости, если вы абстрагируете эти Cujs за пределами генерируемого базового профиля и контрольного кода, чтобы их можно было использовать для обоих. Это означает, что изменения в ваших Cujs используются последовательно.
Создать и установить базовый профиль
Шаблон модуля базового профиля добавляет новую конфигурацию выполнения для генерации базового профиля. Если вы используете ароматы продукта, Android Studio создает несколько конфигураций, чтобы вы могли генерировать отдельные базовые профили для каждого вкуса.

Когда завершается конфигурация запуска базового профиля , она копирует сгенерированный базовый профиль в файл src/ variant /generated/baselineProfiles/baseline-prof.txt
в модуле, который профилируется. Варианты вариантов - это либо тип выпуска, либо вариант сборки, включающий тип сборки выпуска.
Сгенерированный базовый профиль первоначально создается в build/outputs
. Полный путь продиктован вариантом или вкусом приложения, который профилируется, и используете ли вы устройство управляемого градлом или подключенное устройство для профилирования. Если вы используете имена, используемые конфигурациями кода и сборки, сгенерированные шаблоном, базовый профиль создается в build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt
. Вероятно, вам не придется взаимодействовать с этой версией сгенерированного базового профиля напрямую, если вы не копируете его вручную в целевые модули (не рекомендуется).
Создайте новый базовый профиль с AGP 8.1
Если вы не можете использовать шаблон модуля базового профиля , используйте шаблон модуля MacRobenchmark и плагин базового профиля Gradle, чтобы создать новый базовый профиль. Мы рекомендуем использовать эти инструменты, начиная с Android Studio Giraffe и AGP 8.1.
Вот шаги по созданию нового базового профиля, используя шаблон модуля MacroBenchmark и плагин Gradle Profile Profile:
- Установите модуль Macrobenchmark в вашем проекте Gradle.
- Определите новый класс под названием
BaselineProfileGenerator
:class BaselineProfileGenerator { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun startup() = baselineProfileRule.collect( packageName = "com.example.app", profileBlock = { startActivityAndWait() } ) }
Генератор может содержать взаимодействие с вашим приложением помимо запуска приложений. Это позволяет оптимизировать производительность времени выполнения вашего приложения, например, списки прокрутки, запуск анимации и навигация в рамках
Activity
. См. Другие примеры тестов, которые используют@BaselineProfileRule
для улучшения критических поездок пользователей. Добавьте плагин базового профиля Gradle (
libs.plugins.androidx.baselineprofile
). Плагин облегчает создание базовых профилей и поддержание их в будущем.Чтобы сгенерировать базовый профиль, запустите
:app:generateBaselineProfile
или:app:generate Variant BaselineProfile
Gradle Задачи в терминале.Запустите генератор в качестве инструментального теста на корневом физическом устройстве, эмуляторе или управляемом устройстве Gradle . Если вы используете управляемое устройство Gradle, установите
aosp
в качествеsystemImageSource
, потому что вам нужен корневой доступ для базового генератора профиля.В конце задачи генерации базовый профиль копируется в
app/src/ variant /generated/baselineProfiles
.
Создать новый базовый профиль без шаблонов
Мы рекомендуем создать базовый профиль, используя шаблон базового профиля Android Studio (предпочтительный) или шаблон Macrobenchmark , но вы также можете самостоятельно использовать плагин Gradle Basine Profile. Чтобы узнать больше о плагине базового профиля Gradle, см . Настройте генерацию базового профиля .
Вот как создать базовый профиль, используя плагин базового профиля Gradle напрямую:
- Создайте новый модуль
com.android.test
-например:baseline-profile
. Настройте файл
build.gradle.kts
для:baseline-profile
:- Примените плагин
androidx.baselineprofile
. - Убедитесь, что
targetProjectPath
указывает на:app
. - Необязательно, добавьте устройство, управляемое градем (GMD) . В следующем примере это
pixel6Api31
. Если не указано, плагин использует подключенное устройство, либо эмулированное, либо физическое. - Примените нужную конфигурацию, как показано в следующем примере.
Котлин
plugins { id("com.android.test") id("androidx.baselineprofile") } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath = ":app" // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device = "Pixel 6" apiLevel = 31 systemImageSource = "aosp" } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices += "pixel6Api31" // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices = false }
Круто
plugins { id 'com.android.test' id 'androidx.baselineprofile' } android { defaultConfig { ... } // Point to the app module, the module that you're generating the Baseline Profile for. targetProjectPath ':app' // Configure a GMD (optional). testOptions.managedDevices.devices { pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) { device 'Pixel 6' apiLevel 31 systemImageSource 'aosp' } } } dependencies { ... } // Baseline Profile Gradle plugin configuration. Everything is optional. This // example uses the GMD added earlier and disables connected devices. baselineProfile { // Specifies the GMDs to run the tests on. The default is none. managedDevices ['pixel6Api31'] // Enables using connected devices to generate profiles. The default is // `true`. When using connected devices, they must be rooted or API 33 and // higher. useConnectedDevices false }
- Примените плагин
Создайте базовый тест профиля в
:baseline-profile
тестовой модуле. Следующий пример - тест, который запускает приложение и ожидает простоя.Котлин
class BaselineProfileGenerator { @get:Rule val baselineRule = BaselineProfileRule() @Test fun startupBaselineProfile() { baselineRule.collect("com.myapp") { startActivityAndWait() } } }
Ява
public class BaselineProfileGenerator { @Rule Public BaselineProfileRule baselineRule = new BaselineProfileRule(); @Test Public void startupBaselineProfile() { baselineRule.collect( "com.myapp", (scope -> { scope.startActivityAndWait(); Return Unit.INSTANCE; }) ) } }
Обновите файл
build.gradle.kts
в модуле приложения, например:app
.- Примените плагин
androidx.baselineprofile
. - Добавьте
baselineProfile
зависимость в модуле:baseline-profile
.
Котлин
plugins { id("com.android.application") id("androidx.baselineprofile") } android { // There are no changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile(project(":baseline-profile")) }
Круто
plugins { id 'com.android.application' id 'androidx.baselineprofile' } android { // No changes to the `android` block. ... } dependencies { ... // Add a `baselineProfile` dependency on the `:baseline-profile` module. baselineProfile ':baseline-profile' }
- Примените плагин
Сгенерируйте профиль, выполнив
:app:generateBaselineProfile
или:app:generate Variant BaselineProfile
GRADLE.В конце задачи генерации базовый профиль копируется в
app/src/ variant /generated/baselineProfiles
.
Создайте новый базовый профиль с AGP 7.3-7.4
Можно сгенерировать базовые профили с AGP 7.3-7.4, но мы настоятельно рекомендуем обновить как минимум до AGP 8.1, чтобы вы могли использовать плагин Gradle Baseline и его последние функции.
Если вам нужно создать базовые профили с AGP 7.3-7.4, шаги совпадают с шагами для AGP 8.1 , за следующими исключениями:
- Не добавляйте плагин базового профиля Gradle.
- Чтобы сгенерировать базовые профили, выполните задачу Gradle
./gradlew [emulator name][flavor][build type]AndroidTest
. Например,./gradlew :benchmark:pixel6Api31BenchmarkAndroidTest
. - Вы должны вручную применить сгенерированные правила базового профиля к вашему коду .
Применять сгенерированные правила вручную
Генератор базового профиля создает текстовый файл для читаемого формата человека (HRF) на устройстве и копирует его на вашу хост -машину. Чтобы применить сгенерированный профиль к вашему коду, выполните следующие действия:
Найдите файл HRF в папке сборки модуля
[module]/build/outputs/managed_device_android_test_additional_output/[device]
Профили следуют за
[class name]-[test method name]-baseline-prof.txt
именование, которое выглядит следующим образом:BaselineProfileGenerator-startup-baseline-prof.txt
.Скопируйте сгенерированный профиль в
src/main/
и переименуйте файл вbaseline-prof.txt
.Добавьте зависимость в библиотеку ProfileInstaller в файле вашего приложения
build.gradle.kts
, чтобы включить локальную базовую компиляцию профиля, где облачные профили недоступны. Это единственный способ обосторить базовый профиль локально.dependencies { implementation("androidx.profileinstaller:profileinstaller:1.4.1") }
Создайте производственную версию вашего приложения, в то время как прикладные правила HRF собираются в двоичную форму и включены в APK или AAB. Затем распространите свое приложение как обычно.
Оценка базового профиля
Чтобы оценить свой базовый профиль, создайте новую конфигурацию Android -инструментального тестового запуска из действия Gutter, которая выполняет тесты, определенные в файле StartupBenchmarks.kt
или StartupBencharks.java
. Чтобы узнать больше о тестировании эталона, см. Создайте класс Macrobenchmark и автоматизируйте измерение с библиотекой Macrobenchmark .

Когда вы запускаете это в Android Studio, выходной выход содержит подробную информацию о улучшениях скорости, которые предоставляет базовый профиль:
StartupBenchmarks_startupCompilationBaselineProfiles timeToInitialDisplayMs min 161.8, median 178.9, max 194.6 StartupBenchmarks_startupCompilationNone timeToInitialDisplayMs min 184.7, median 196.9, max 202.9
Захватить все необходимые пути кода
Два ключевых показателя для измерения времени запуска приложений следующие:
- Время до начального отображения (TTID)
- Время, необходимое для отображения первого кадра пользовательского интерфейса приложения.
- Время до полного отображения (TTFD)
- TTID плюс время для отображения контента, которое загружается асинхронно после отображения начальной кадры.
TTFD сообщается, как только называется метод ComponentActivity
. Если reportFullyDrawn()
reportFullyDrawn()
не вызывается, вместо этого сообщается о TTID. Возможно, вам придется отложить при вызове reportFullyDrawn()
до тех пор, пока не будет завершена асинхронная нагрузка. Например, если пользовательский интерфейс содержит динамический список, такой как RecyclerView
или Lazy List , список может быть заполнен фоновой задачей, которая завершается после того, как список сначала нарисован и, следовательно, после того, как пользовательский интерфейс отмечен как полностью нарисованный. В таких случаях код, который работает после того, как пользовательский интерфейс достигает полностью нарисованного состояния, не включен в базовый профиль.
Чтобы включить популяцию списка как часть вашего базового профиля, получите FullyDrawnReporter
, используя getFullyDrawnReporter()
и добавьте в него репортер в код вашего приложения. Отпустите репортер, как только фоновая задача заполняет заполнение списка. FullyDrawnReporter
не вызывает reportFullyDrawn()
, пока все репортеры не будут выпущены. При этом базовый профиль включает в себя пути кода, необходимые для заполнения списка. Это не меняет поведение приложения для пользователя, но позволяет базовому профилю включать все необходимые пути кода.
Если ваше приложение использует JetPack Compose , используйте следующие API, чтобы указать полностью нарисованное состояние:
-
ReportDrawn
указывает, что ваш композитный сразу же готов к взаимодействию. -
ReportDrawnWhen
когда требуется предикат, такой какlist.count > 0
, чтобы указать, когда ваш композитный доступ готов к взаимодействию. -
ReportDrawnAfter
принимает приостановленный метод, который, когда он завершается, указывает, что ваш композитный готов к взаимодействию.
Рекомендовано для вас
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Захват метрики Macrobenchmark
- Напишите Macrobenchmark
- Библиотека Jankstats