启动配置文件是基准配置文件的一部分。启动配置文件供 以便进一步优化其中包含的类和方法, 改进 APK 的 DEX 文件中的代码布局。借助启动配置文件, 应用启动速度比仅使用基准配置文件快 15% 之多。
<ph type="x-smartling-placeholder">要求
我们建议将启动配置文件与以下工具搭配使用:
- 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 布局 优化。
为您推荐
- 注意:当 JavaScript 处于关闭状态时,系统会显示链接文字
- 创建基准配置文件 {:#creating-profile-rules}
- 基准配置文件 {:#baseline-profiles}
- 编写 Microbenchmark