此页面介绍在使用 Microbenchmark 库时配置非 Gradle 构建系统。
虽然 Microbenchmark 库附带一个 Gradle 插件,可以直接与 Android Gradle 插件集成,但您也可以在其他构建系统(例如 Bazel 或 Buck)中使用它。
检测
通过在测试清单的 instrumentation 块中指定 AndroidBenchmarkRunner
或其子类作为您的检测运行器
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" /> ... </manifest>
为了获得准确的测量结果,基准测试不得可 调试。如果您没有正确设置可调试标志,库将抛出错误,而不是报告无效结果。您可能需要在本地运行期间切换此设置才能与 Android Studio 分析器一起使用,后者需要 debuggable=true
。
您可以构建微基准测试以两种方式运行:在自检测 APK 中,或使用一个测试 APK 检测另一个 APK。
自检测 APK
对于自检测 APK(由 Gradle 为 androidTest
目录(来自 com.android.library
)输出),必须在单个 APK 的 Android 清单中禁用可调试功能
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" android:targetPackage="com.example.library.test"/> <application android:debuggable="false"/> </manifest>
测试 APK 检测的应用 APK
如果您的构建输出两个 APK——一个应用 APK 和一个测试 APK(Gradle 为 com.android.app
包中的 androidTest
目录输出)——则必须将应用 APK 设置为 debuggable=false
。Android 操作系统会忽略测试 APK 的 debuggable 标志。
<!-- Test manifest. --> <manifest package="com.example.android.app.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" android:targetPackage="com.example.android.app"/> <!-- This debuggable is ignored by the OS. --> </manifest> <!-- App being tested. --> <manifest package="com.example.android.app" ...> <application android:debuggable="false"/> </manifest>
Android Studio 和 Gradle 不支持对应用模块 APK 进行微基准测试。这是因为支持依赖于 APK 的不可调试、已优化或已缩小的变体的附加测试目录很复杂,但缩小不会破坏基准测试对应用代码的调用。
编译
我们建议您在运行测试之前编译微基准测试 APK,使用以下命令
adb shell cmd package compile -f -m speed com.example.benchmark
缩小和优化
我们建议您对基准测试使用缩小和优化,以获得接近发布版本的性能。有关示例代码,请参阅基准测试示例项目。
代码覆盖率
我们建议禁用代码覆盖率,并且不要使用 JaCoCo 等工具进行任何库或 DEX 混淆,来运行基准测试。
因此,我们建议您将基准测试作为源集与其他检测测试隔离,并使用发布依赖项单独构建它们。这样可以避免多次构建测试,既有启用代码覆盖率的,也有禁用代码覆盖率的。
您的基准测试依赖的库的调试版本,特别是本地构建的那些库,可能会启用代码覆盖率进行构建。
运行测试
您可以从命令行运行测试并指定要运行的类,如下例所示
adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
要无需 Gradle 即可在运行时配置 Microbenchmark 库,请参阅Microbenchmark 检测参数。
推荐内容
- 注意:JavaScript 关闭时显示链接文本
- 编写微基准测试
- 创建基线配置文件 {:#creating-profile-rules}