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

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

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

Требования

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

  • Jetpack Macrobenchmark 1.2.0 или выше
  • Плагин Android Gradle 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
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

Запустите команду «Создать базовый профиль для конфигурации приложения» и найдите правила профиля запуска по адресу src/<variant>/generated/baselineProfiles/startup-prof.txt .

Подтвердить оптимизацию профилей запуска

Чтобы подтвердить оптимизацию макета DEX, используйте Android Studio, чтобы открыть APK и проверить классы в файлах DEX. Убедитесь, что основной classes.dex заполнен не полностью. Если ваше приложение состоит из одного файла DEX, вы можете проверить, содержит ли приложение два файла DEX, после включения профиля запуска.

Android Studio предупреждает вас, если классы запуска не помещаются в один файл DEX. Чтобы получить диагностическую информацию, включающую количество незапускаемых методов в классах запуска, убедитесь, что компилятор R8 обновлен как минимум до версии 8.3.36-dev, внеся следующие изменения в файл settings.gradle при применении параметра Startup. Профиль:

Котлин

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.6-dev")
        }
    }
}

классный

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

Обязательно добавьте --info после assembleRelease в следующей команде при сборке с помощью Gradle.

./gradlew assembleRelease --info

Диагностическое сообщение затем распечатывается на терминале.

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

{% дословно %} {% дословно %} {% дословно %} {% дословно %}