执行createDebugCoverageReport报JacocoReportWorkerAction错误如何解决
解决方案
- 关闭debug构建的混淆配置
如果主项目的debug构建开启了minifyEnabled true,混淆会修改类名、方法名结构导致Jacoco无法匹配字节码与源码,将debug构建的混淆开关设置为false即可,也可以补充Jacoco混淆白名单:
-keep class * { *; } -dontwarn java.lang.instrument.**
- 清理构建缓存后重试
先执行清理命令再生成报告,避免增量编译缓存的异常影响Jacoco插桩结果:
gradlew clean createDebugCoverageReport
- 统一Jacoco版本,避免版本冲突
Android Gradle Plugin有内置适配的Jacoco版本,如果项目手动指定了不兼容的Jacoco版本会触发报错,可以在app模块的build.gradle中指定匹配AGP版本的Jacoco:
android { jacoco { // 可根据你使用的AGP版本选择对应适配的Jacoco版本,AGP 7.4+推荐用0.8.8及以上版本 version = "0.8.8" } }
- 排查字节码插桩冲突
如果项目接入了其他字节码插桩框架(比如自定义ASM插桩、热修复框架、全埋点框架),会和Jacoco的插桩逻辑冲突,临时关闭其他插桩逻辑后重新执行命令验证。 - 确认测试用例运行正常
先执行gradlew connectedDebugAndroidTest确认所有AndroidTest用例可以正常运行完成,测试用例执行崩溃会导致覆盖率采集不完整,无法生成报告。 - 多模块项目补充子模块配置
如果主项目依赖多个子模块,需要所有需要统计覆盖率的子模块也开启testCoverageEnabled true,同时在主项目的Jacoco报告配置中包含所有子模块的class文件路径,避免Jacoco找不到匹配的类文件。
内容的提问来源于stack exchange,提问作者Manohar
相关产品推荐
相关产品推荐

