二、生成方式概览
这一章我们聊聊怎么搞出 Baseline Profile。说白了,就三种路子:Android Studio 菜单点一点、Gradle 插件自动跑、还有命令行硬核操作。
我个人习惯用 Gradle 插件方式,因为 CI 上集成起来省心。但实际项目里三种我都踩过坑,今天一并说清楚。
1. 通过 Android Studio 生成
最简单粗暴的方式。你打开 Android Studio,连上设备或模拟器,然后点 Build → Generate Baseline Profile...。嗯,就这一步。
会弹出一个对话框,让你选哪个模块要生成。我建议选 app 模块,除非你有依赖库特别想单独测。
操作流程:
- 确保当前设备/模拟器上安装了目标 App(最好是 Release 构建,我遇到过 Debug 构建生成不准的问题)
- 点击菜单后,Studio 会自动启动 App 并采集执行路径
- 完成后会在
src/main/baselineProfiles/下生成baseline-prof文件
我常用的一个小技巧:生成前先跑一遍用户的核心操作流(比如登录、首页滚动),这样采集的 profile 更贴近真实场景。
2. 通过 Gradle 插件自动生成
这才是工程化的解法。你想想看,每次发版都要手动点菜单?不现实。Gradle 插件可以嵌入构建流程,每次 Release 构建时自动生成。
配置步骤:
- 在项目根
build.gradle里添加插件:
plugins {
id 'com.android.application' version '8.x.x'
id 'androidx.baselineprofile' version '1.2.x'
}
- 在 app 模块的
build.gradle里启用:
android {
baselineProfile {
enabled true
}
}
- 创建一个测试类,继承
BaselineProfileRule,写上要采集的目标 Activity 或导航路径。 - 运行
./gradlew :app:generateBaselineProfile。
我曾经踩过的坑:测试类忘记加
@RunWith(AndroidJUnit4.class) 注解,任务直接失败。另外,依赖库的 profile 需要在对应模块也配上插件,否则实际优化效果大打折扣。
3. 命令行手动生成
适合自动化脚本,或者你想精细控制采集过程。用 Android SDK 自带的 profgen 工具。
基本命令:
profgen --apk=app-release.apk --output=baseline-prof.txt
这个工具会读取 APK,内部模拟执行并生成 profile。你还可以加参数 --duration=10 控制采集时长。
说实话,命令行方式我平时用得少,但有一次 CI 环境没有图形界面,全靠它救场。注意:如果你用 profgen,必须保证 APK 已签名。另外,生成的文件是纯文本,需要重命名为 baseline-prof 放到 assets 目录。
三种方式对比:
| 生成方式 | 使用难度 | CI 集成 | 采集可控性 | 推荐场景 |
|---|---|---|---|---|
| Android Studio | 极低 | 不可 | 低 | 本地快速验证 |
| Gradle 插件 | 中等 | 完美 | 中 | 团队项目、自动化发版 |
| 命令行 | 高 | 可 | 高 | 特殊定制、离线环境 |
看到这张图你大概也明白了——无论走哪条路,最后拿到的都是同一个 baseline-prof 文件,区别只在过程的自动化程度。我个人建议:小项目用 Android Studio 最省事;团队项目一定上 Gradle 插件;你要是写自动化脚本,命令行就派上用场了。