Создание базовых профилей
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Базовые профили необходимы для максимальной производительности Jetpack Compose. Предварительная компиляция критически важных пользовательских сценариев помогает обеспечить плавную отрисовку пользовательского интерфейса Compose.
Автоматически создавайте профили для каждого релиза приложения, используя библиотеку Jetpack Macrobenchmark и BaselineProfileRule . Мы рекомендуем использовать com.android.tools.build:gradle:8.0.0 или более позднюю версию, чтобы воспользоваться преимуществами улучшений сборки при использовании базовых профилей.
Вот общие шаги для создания нового базового профиля:
Настройте модуль «Базовый профиль».
Определите модульный тест (JUnit), который помогает создавать базовые профили.
Добавьте критически важные пользовательские сценарии (CUJ), которые вы хотите оптимизировать.
Сгенерируйте базовый профиль.
После создания базового профиля проведите его тестирование с помощью физического устройства, чтобы измерить улучшение скорости.
Создайте новый базовый профиль с помощью AGP 8.2 или выше.
Самый простой способ создать новый базовый профиль — использовать шаблон модуля «Базовый профиль», доступный начиная с Android Studio Iguana и Android Gradle Plugin (AGP) 8.2.
Шаблон модуля «Генератор базовых профилей Android Studio» автоматизирует создание нового модуля для генерации и тестирования базовых профилей. Запуск шаблона генерирует большую часть типичной конфигурации сборки, код генерации базовых профилей и код проверки. Шаблон создает код для генерации и тестирования базовых профилей для измерения производительности при запуске приложения.
Настройка модуля «Базовый профиль»
Для запуска шаблона модуля «Базовый профиль» выполните следующие действия:
Выберите Файл > Создать > Новый модуль .
Выберите шаблон «Генератор базового профиля» на панели «Шаблоны» и настройте его: Рисунок 1. Шаблон модуля «Генератор базового профиля». В шаблоне содержатся следующие поля:
Целевое приложение : приложение, для которого создается базовый профиль. Если в вашем проекте только один модуль приложения, в этом списке будет только один элемент.
Название модуля : имя, которое вы хотите присвоить создаваемому модулю «Базовый профиль».
Имя пакета : имя пакета, которое вы хотите использовать для модуля «Базовый профиль».
Язык : укажите, хотите ли вы, чтобы сгенерированный код был написан на Kotlin или Java.
Язык конфигурации сборки : хотите ли вы использовать Kotlin Script (KTS) или Groovy для скриптов конфигурации сборки.
Используйте управляемые Gradle устройства : указываете, используете ли вы управляемые Gradle устройства для тестирования вашего приложения.
Нажмите «Готово» , и новый модуль будет создан. Если вы используете систему контроля версий, вам может быть предложено добавить файлы только что созданного модуля в систему контроля версий.
Определите генератор базового профиля.
The newly created module contains tests to both generate and benchmark the Baseline Profile and test only basic app startup. We recommend that you augment these to include CUJs and advanced startup workflows. Make sure that any tests related to app startup are in a rule block with includeInStartupProfile set to true ; conversely, for optimal performance make sure that any tests not related to app startup are not included in a Startup Profile. App startup optimizations are used to define a special part of a Baseline Profile called a Startup Profile .
Для повышения удобства сопровождения рекомендуется абстрагировать эти CUJ-модули от сгенерированного кода базового профиля и бенчмарк-кода, чтобы их можно было использовать в обоих случаях. Это означает, что изменения в ваших CUJ-модулях будут использоваться согласованно.
Сгенерируйте и установите базовый профиль.
Шаблон модуля «Базовый профиль» добавляет новую конфигурацию запуска для генерации базового профиля. Если вы используете варианты продукта, Android Studio создаст несколько конфигураций запуска, чтобы вы могли генерировать отдельные базовые профили для каждого варианта.
Рисунок 2. При выполнении данной конфигурации генерируется базовый профиль.
После завершения настройки запуска функции «Создать базовый профиль» сгенерированный базовый профиль копируется в файл src/ variant /generated/baselineProfiles/baseline-prof.txt в модуле, который профилируется. Вариантами выбора являются либо тип сборки «релиз», либо вариант сборки, включающий тип сборки «релиз».
The generated Baseline Profile is originally created in build/outputs . The full path is dictated by the variant or flavor of the app being profiled and whether you use a Gradle-managed device or a connected device for profiling. If you use the names used by the code and build configurations generated by the template, the Baseline Profile is created in the build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt file. You probably won't have to interact with this version of the generated Baseline Profile directly unless you're manually copying it to the target modules (not recommended).
Создайте новый базовый профиль с помощью AGP 8.1.
Если у вас нет возможности использовать шаблон модуля «Базовый профиль» , воспользуйтесь шаблоном модуля «Макробенчмарк» и плагином Gradle «Базовый профиль» для создания нового базового профиля. Мы рекомендуем использовать эти инструменты, начиная с Android Studio Giraffe и AGP 8.1.
Вот шаги по созданию нового базового профиля с использованием шаблона модуля Macrobenchmark и плагина Gradle для создания базового профиля:
Генератор может содержать взаимодействия с вашим приложением, выходящие за рамки его запуска. Это позволяет оптимизировать производительность приложения во время выполнения, например, прокрутку списков, запуск анимаций и навигацию внутри Activity . См. другие примеры тестов, использующих @BaselineProfileRule для улучшения критически важных пользовательских сценариев.
Добавьте плагин Gradle для создания базовых профилей ( libs.plugins.androidx.baselineprofile ). Этот плагин упрощает генерацию базовых профилей и их последующее сопровождение.
Для создания базового профиля запустите в терминале задачи Gradle :app:generateBaselineProfile или :app:generate Variant BaselineProfile .
Запустите генератор в режиме инструментального тестирования на физическом устройстве с правами root, эмуляторе или устройстве, управляемом Gradle . Если вы используете устройство, управляемое Gradle, установите aosp в качестве systemImageSource , поскольку для генератора базового профиля необходимы права root.
По завершении процесса генерации базовый профиль копируется в папку app/src//generated/baselineProfiles .
Создайте новый базовый профиль без использования шаблонов.
Вот как создать базовый профиль, используя непосредственно плагин Baseline Profile Gradle:
Создайте новый модуль com.android.test , например, :baseline-profile .
Настройте файл build.gradle.kts для :baseline-profile :
Примените плагин androidx.baselineprofile .
Убедитесь, что targetProjectPath указывает на модуль :app .
При желании можно добавить устройство, управляемое Gradle (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=31systemImageSource="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'apiLevel31systemImageSource'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.useConnectedDevicesfalse}
Создайте тест базового профиля в модуле тестирования :baseline-profile . В следующем примере показан тест, который генерирует базовый профиль для запуска приложения.
Обновите файл 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'}
Создайте профиль, запустив задачи Gradle ` :app:generateBaselineProfile или :app:generate Variant BaselineProfile .
По завершении процесса генерации базовый профиль копируется в папку app/src/ variant /generated/baselineProfiles .
Рисунок 3. Запуск тестов Android из боковой панели.
При запуске этого кода в 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
Укажите все необходимые пути выполнения кода.
Для измерения времени запуска приложения используются два ключевых показателя:
TTFD is reported once the reportFullyDrawn method of the ComponentActivity is called. If reportFullyDrawn is never called, the TTID is reported instead. You might need to delay when reportFullyDrawn is called until after asynchronous loading is complete. For example, if the UI contains a dynamic lazy list , the list might be populated by a background task that completes after the list is first drawn and, therefore, after the UI is marked as fully drawn. In such cases, code that runs after the UI reaches fully drawn state isn't included in the Baseline Profile.
To include the list population as part of your Baseline Profile, get the FullyDrawnReporter by using getFullyDrawnReporter and add a reporter to it in your app code. Release the reporter once the background task finishes populating the list. The FullyDrawnReporter doesn't call the reportFullyDrawn method until all reporters are released. By doing this, Baseline Profile includes the code paths required to populate the list. This doesn't change the app's behavior for the user, but it lets the Baseline Profile include all the necessary code paths.
Для отображения состояния полной отрисовки используйте следующие API Compose:
ReportDrawn указывает, что ваш составной объект немедленно готов к взаимодействию.
ReportDrawnWhen принимает предикат, например list.count > 0 , чтобы указать, когда ваш компонент готов к взаимодействию.
Метод ReportDrawnAfter принимает приостанавливающий вызов, который по завершении указывает на готовность вашего составного объекта к взаимодействию.
{% verbatim %} {% endverbatim %}
Рекомендуем вам
Примечание: текст ссылки отображается, когда JavaScript отключен.
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.