创建启动配置文件

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

图 1.DEX 布局优化的代码位置改进。

要求

我们建议您使用以下工具来使用启动配置文件:

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

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

  • R8 已启用。对于发布 build,请设置 isMinifyEnabled = true
  • 已启用 DEX 布局优化。在应用模块的 build 文件的 baselineProfile {} 块中,设置 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
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

运行为应用生成基准配置文件配置,然后在 src/<variant>/generated/baselineProfiles/startup-prof.txt 中找到启动配置文件规则。

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

在创建启动配置文件时,为了确定要涵盖哪些用户历程,请考虑大多数用户从何处开始使用应用。通常,用户从启动器启动应用,并且已登录。这也是最基本的基准配置文件历程。

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

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

从顶部开始处理此列表,并在 classes.dex 达到最大容量之前停止。为了在之后涵盖更多用户历程,请将代码移出启动路径并添加更多用户历程。 如需将代码移出启动路径,请在应用启动期间检查 Perfetto 轨迹,并查找长时间运行的操作。您还可以使用启用了方法跟踪macrobenchmark,以便自动且完整地了解应用启动期间的方法调用情况。