创建启动配置文件

启动配置文件是基准配置文件的子集。构建系统使用启动配置文件 通过改进 APK 的 DEX 文件中的代码布局,进一步优化其中包含的类和方法 。使用启动配置文件后, 应用启动速度通常比仅使用基准 配置文件时快 15% 到 30%。

图 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文件),其中包含启动到深层链接。 深层链接会直接转到应用的新闻 Feed,而不是应用的主屏幕。

@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 for app 配置,并在 启动配置文件规则位于 src/<variant>/generated/baselineProfiles/startup-prof.txt 中查找。

创建启动配置文件的注意事项

如需确定在创建启动配置文件时要涵盖哪些用户历程,请考虑 大多数用户在何处启动应用。通常,用户会在启动器中启动应用,并且在 登录后启动。这也是最基本的基准配置文件 历程。

涵盖第一个用例后,请遵循应用 启动的用户漏斗。在许多情况下,应用启动漏斗遵循以下列表:

  1. 主启动器 activity
  2. 触发应用启动的通知
  3. 可选启动器 activity

从顶部开始处理此列表,并在 classes.dex 已满之前停止。如需在之后涵盖 更多历程,请将代码移出启动路径并添加更多 历程。 如需将代码移出启动路径,请在应用启动期间检查 Perfetto 跟踪记录 并查找长时间运行的操作。您还可以使用宏基准测试 (启用方法跟踪),以便在应用启动期间自动查看完整的方法调用。