Baseline Profile
新环境
- 当前所使用的
Android Studio的版本为Android Studio Panda 4 | 2025.3.4 Patch 1 Gradle的版本为8.11.1AGP的版本为8.9.2
新建模块
在项目中创建一个Baseline Profile Generator模块,在窗口的参数中,只说一下Target application,和Use Gradle Managed Device
其中,Target application是要生成的基准配置文件所对应的应用模块,Use Gradle Managed Device选中后,将模块设置为在自动管理的Android模拟器上运行基准配置文件生成器,使用真机的情况下,不需要勾选这个选项。完成后点击Finish
项目变化
完事之后,除了添加一个新模块之外,项目中还会发生如下的变化
gradle目录下的libs.versions.toml配置文件- 项目根目录下的
build.gradle - 项目根目录下的
settings.gradle - 项目根目录下的
gradle.properties app模块的build.gradle
libs.versions.toml
会增加如下配置
1 | [versions] |
如果引入上面的配置,实际上相当于
1 | // libraries |
project:build.gradle
在项目根目录下的build.gradle文件中,会增加如下配置,声明了两个插件的版本,之后在app模块的build.gradle文件中再声明时无需注明版本号
1 | plugins { |
settings.gradle
没什么好说的,增加了一个模块的引用
1 | include ':baselineprofile' |
gradle.properties
在gradle.properties文件中,会增加如下配置,启用Gradle的配置缓存功能,以加快构建速度
1 | org.gradle.configuration-cache=true |
app:build.gradle
app模块的build.gradle文件中会增加如下配置,其中:
baselineProfile project(':baselineprofile')依赖项,让Gradle知道应该从哪个模块获取已生成的基准配置文件profileinstaller依赖项,应用首次启动时,它会读取并安装打包在APK中的基准配置文件,告诉Android Runtime(ART)哪些代码路径需要提前编译(AOT)
1 | plugins { |
Baseline Profile模块配置
Baseline Profile Generator模块的build.gradle文件中,简单分析一下如下配置
alias(libs.plugins.android.test)声明了这是一个测试模块
1 | plugins { |
targetProjectPath指定了要生成基准配置文件的目标应用模块,animationsDisabled则是自动关闭设备动画,保证测试结果稳定
1 | android { |
在baselineProfile配置项中,启用useConnectedDevices选项,让生成器在连接的设备上运行测试,以收集基准配置文件数据
1 | baselineProfile { |
如下依赖项,其中:
benchmark-macro-junit4是基准测试框架espresso-core和uiautomator是用于编写用户界面测试的库junit是用于编写单元测试的库
1 | dependencies { |
其他配置
实际上,在有了上面的配置之后,项目就已经具备了生成基准配置文件的能力了,但是在生成之前,我们还需要对baselineprofile模块进行一些额外的配置
在app模块的build.gradle文件中,增加如下配置,让启动热点代码尽可能位于DEX前部,减少启动时的随机I/O和页面加载时间,在较新的gradle版本中,这个配置项已经被默认启用
1 | baselineProfile { |
编写测试用例
BaselineProfileRule负责采集性能数据和Profile,并将其转换为基准配置文件格式,UIAutomator负责点击、滑动、长按、输入等用户界面交互操作
1 |
|
查找text为 分类 的view并点击
1 | device.findObject( |
通过资源id匹配view并点击
1 | device.findObject( |
RecyclerView滚动
1 | // 通过资源 id 匹配 recyclerView |
还有很多,用到的时候再查文档吧
生成基准配置文件
在旧的AGP版本中,执行如下命令(其中:baselineprofile是模块名),会在连接的设备上运行测试用例,收集性能数据,并生成基准配置文件
1 | ./gradlew :baselineprofile:generateBaselineProfile |
但是AGP 8.2+以后,这个Task在app模块上了,所以执行如下命令
1 | ./gradlew :app:generateBaselineProfile |
也有可能Task名字变了,执行如下命令查看一下指定的模块中有没有相应的Task
1 | ./gradlew :baselineprofile:tasks --all |
打包
生成基准配置文件之后,如果配置文件路径没在main目录下,需要将生成的基准配置文件复制到app模块的src/main/baseline-prof.txt路径下,之后可以通过如下命令将其打包到APK中
1 | ./gradlew :app:assembleRelease |
参考: