Android基准测试报错:目标APK未找到Baseline Profile求助
解决Baseline Profile基准测试时的FileNotFoundException问题
问题重现
尝试使用生成的Baseline Profile运行Macrobenchmark时,即使已将文件复制到所有变体文件夹,仍抛出FileNotFoundException,提示找不到dexopt/baseline.prof,基准测试报错No baseline profile was found in the target apk。
排查与解决步骤
1. 严格检查文件路径与命名
- 基线配置文件必须放在**
src/main/assets/dexopt/**目录下,文件名必须是baseline.prof(Android文件系统区分大小写,注意大小写匹配) - 若为变体专属配置,需放在对应变体目录(如
src/release/assets/dexopt/),但main目录下的文件应被所有变体继承
2. 确认Gradle配置正确性
- 在app模块的
build.gradle.kts(或build.gradle)中启用基线配置支持:android { buildFeatures { baselineProfile = true } } dependencies { // 使用最新稳定版的ProfileInstaller implementation("androidx.profileinstaller:profileinstaller:1.3.1") } - 检查sourceSets配置,确保assets目录未被排除:
android { sourceSets { main { assets.srcDirs("src/main/assets") } } }
3. 清理缓存并重建项目
- 执行清理命令:
./gradlew clean - 重新编译目标变体:
./gradlew assemble<Variant>(例如assembleRelease) - 用Android Studio的APK Analyzer打开生成的APK,确认
assets/dexopt/baseline.prof存在且内容有效(非空、无乱码)
4. 对齐基准测试与目标变体配置
- 在基准测试模块的
build.gradle.kts中,确保测试变体依赖包含基线配置的目标变体:android { buildTypes { benchmark { matchingFallbacks = listOf("release") // 匹配包含基线配置的buildType isDebuggable = false } } } - 运行测试时指定正确的变体与测试类:
./gradlew benchmark:connectedBenchmarkAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.mobile.android.beta.benchmark.exampleStartupBenchmark
5. 版本兼容性检查
- 确保
androidx.benchmark:benchmark-macro-junit4与androidx.profileinstaller:profileinstaller使用兼容的最新稳定版本,避免版本冲突导致的加载异常
内容的提问来源于stack exchange,提问作者Manoj MM
相关产品推荐
相关产品推荐

