创建启动配置文件

启动配置文件是基准配置文件的一部分。启动配置文件 以进一步优化它们包含的类和方法 优化 APK 的 DEX 文件中的代码布局。借助启动配置文件, 使用 Baseline 时,应用的启动速度通常比使用 Baseline 的速度快 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 文件)包括从 主屏幕并启动深层链接。深层链接会直接跳转到应用的新闻动态,而不是应用的主屏幕。

@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 布局 优化。

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

启动配置文件的类和方法的输出受 第一个 class.dex 文件这意味着,并非所有基准配置文件历程 初创公司资料历程也应如此

如需决定在创建初创公司资料时要涵盖哪些用户体验历程,请考虑 大多数用户启动应用的位置通常来自启动器 之后再登录相应的网站这也是最基本的基准配置文件

在介绍完第一个应用场景后,按照应用的用户漏斗跟踪 启动。在许多情况下,应用启动漏斗遵循以下列表:

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

从顶部开始处理此列表,并在 class.dex 被占满之前停止。覆盖 之后会有更多旅程,请将代码移出初创公司路径,并添加更多 旅行。 如需将代码移出启动路径,请在应用启动期间检查 Perfetto 跟踪记录 并查找长时间运行的操作您还可以使用 Macrobenchmark启用方法跟踪,以便自动查看应用启动期间的方法调用。