升级Android Gradle插件3.1.0后androidJacocoAnt配置找不到求助
解决AGP 3.1.0升级后JaCoCo报错"Configuration with name 'androidJacocoAnt' not found"
这个问题我之前帮同事排查过,本质是Android Gradle Plugin(AGP)3.1.0对JaCoCo的集成做了重大调整——官方移除了旧的androidJacocoAnt配置,这就是你报错的根源。旧版本AGP依赖Ant任务处理JaCoCo覆盖率,但3.1.0开始官方重构了这部分逻辑,改用更原生的Gradle任务方式集成。
解决方案:重构Jacoco测试报告任务
你需要修改模块级build.gradle里的jacocoTestReport任务,不再依赖androidJacocoAnt,而是直接使用AGP提供的变体属性和路径。以下是完整的示例配置:
apply plugin: 'com.android.application' apply plugin: 'jacoco' android { compileSdkVersion 28 // 替换成你的项目实际版本 buildToolsVersion "28.0.3" defaultConfig { applicationId "com.example.myapp" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" } buildTypes { debug { testCoverageEnabled true // 开启debug版本的覆盖率收集 } } } dependencies { // 你的项目依赖配置... testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' } // 自定义Jacoco覆盖率报告任务 task jacocoTestReport(type: JacocoReport) { // 1. 配置要统计的源码目录 sourceDirectories.setFrom(files(android.sourceSets.main.java.srcDirs)) // 如果项目包含Kotlin代码,需要加上Kotlin源码目录 // sourceDirectories.setFrom(files(android.sourceSets.main.java.srcDirs, android.sourceSets.main.kotlin.srcDirs)) // 2. 配置要统计的类文件目录,排除无关类(可选但推荐) classDirectories.setFrom(files("$buildDir/intermediates/javac/debug/classes") { exclude( "**/R.class", "**/BuildConfig.class", "**/*Test*.class", // 排除测试类本身 "**/kotlin/**/*" // 如果用Kotlin,排除Kotlin生成的中间类(按需调整) ) }) // 3. 配置测试执行数据(单元测试+Instrumentation测试) executionData.setFrom(fileTree(dir: "$buildDir", includes: [ "jacoco/testDebugUnitTest.exec", // 单元测试覆盖率数据 "outputs/code_coverage/debugAndroidTest/connected/*coverage.ec" // Instrumentation测试覆盖率数据 ])) // 4. 配置报告输出格式 reports { xml.enabled true // 用于CI工具解析 html.enabled true // 可视化HTML报告 csv.enabled false // 一般不需要CSV格式 } // 确保先执行测试任务,再生成报告 dependsOn testDebugUnitTest dependsOn createDebugCoverageReport // 如果需要包含Instrumentation测试的覆盖率,加上这个任务 }
关键说明
- 移除所有对
androidJacocoAnt的引用:旧任务里如果有androidJacocoAnt.jacocoClasspath这类代码,全部删掉,改用上面的路径配置。 - 适配多模块项目:如果是多模块项目,每个模块都需要单独配置这个任务,或者可以提取到项目级的
build.gradle里用subprojects统一配置。 - 验证报告:执行
./gradlew jacocoTestReport后,报告会生成在模块/build/reports/jacoco/jacocoTestReport/html目录下,打开index.html就能看到覆盖率详情。
内容的提问来源于stack exchange,提问作者laalto
相关产品推荐
相关产品推荐

