二、生成方式概览

这一章我们聊聊怎么搞出 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 构建时自动生成。

配置步骤:

  1. 在项目根 build.gradle 里添加插件:
plugins {
    id 'com.android.application' version '8.x.x'
    id 'androidx.baselineprofile' version '1.2.x'
}
  1. 在 app 模块的 build.gradle 里启用:
android {
    baselineProfile {
        enabled true
    }
}
  1. 创建一个测试类,继承 BaselineProfileRule,写上要采集的目标 Activity 或导航路径。
  2. 运行 ./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 Profile 三种生成方式流程 生成 Baseline Profile Android Studio 菜单 Build → Generate baseline-prof 文件 build.gradle 配置 写测试类 + 运行任务 自动集成到构建产物 profgen 工具 APK + 参数 baseline-prof.txt 三种方式最终都产出统一的 .baselineprof 文件 只是自动化程度和适用场景不同

看到这张图你大概也明白了——无论走哪条路,最后拿到的都是同一个 baseline-prof 文件,区别只在过程的自动化程度。我个人建议:小项目用 Android Studio 最省事;团队项目一定上 Gradle 插件;你要是写自动化脚本,命令行就派上用场了。