创建启动配置文件

启动配置文件是基准配置文件的一部分。启动配置文件供 以便进一步优化其中包含的类和方法, 改进 APK 的 DEX 文件中的代码布局。借助启动配置文件, 应用启动速度比仅使用基准配置文件快 15% 之多。

<ph type="x-smartling-placeholder">
</ph>
图 1.DEX 布局的代码位置改进 优化。

要求

我们建议将启动配置文件与以下工具搭配使用:

  • Jetpack Macrobenchmark 1.2.0 或更高版本
  • Android Gradle 插件 8.2 或更高版本
  • Android Studio Iguana 或更高版本

此外,您还需要在应用中进行以下设置:

  • 已启用 R8。对于发布 build,请将 isMinifyEnabled = true
  • 已启用 DEX 布局优化。在baselineProfile {} 应用模块的 build 文件,设置 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")
            })
        }
    }
}

运行 Generate Baseline Profile for app 配置,并找到 启动配置文件规则位于 src/<variant>/generated/baselineProfiles/startup-prof.txt

确认启动配置文件优化

如需确认 DEX 布局优化,请使用 Android Studio 打开 APK 并 验证 DEX 文件中的类。确保主 classes.dex 并非 完全填满如果您的应用由单个 DEX 文件组成,您可以查看 在启用启动配置文件后,应用是否包含两个 DEX 文件。

如果启动类无法放入单个 DEX 文件中,Android Studio 会向您发出警告。 如需获取包含非启动方法数量的诊断信息, 启动类,请确保 R8 编译器更新到最低版本 8.3.36-dev,请在安装时对 settings.gradle 文件进行以下更改 应用启动配置文件时:

Kotlin

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

Groovy

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

./gradlew assembleRelease --info

然后,系统会将诊断信息输出到终端。

如果您的应用或任何库引用任何脱糖 API,捆绑的 API 这些类的兼容性实现始终包含在最后一个 DEX 文件中。这个脱糖的最后一个 DEX 文件不参与 DEX 布局 优化。