You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android单元测试Jacoco XML覆盖率报告未生成,适配SonarQube求助

解决Jacoco仅生成HTML报告、未生成SonarQube所需XML报告的问题

1. 确认Jacoco任务的XML输出配置是否完整

最常见的原因是任务配置中未开启XML报告生成。检查你app模块的build.gradle,确保JacocoReport任务里明确设置了xml.required = true:

task codeCoverageReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) {
    reports {
        html.required = true
        xml.required = true // 必须开启这一行,否则不会生成XML报告
        csv.required = false
    }

    // 适配你的项目结构,指定类文件、源文件和执行数据路径
    def debugClassDir = fileTree(dir: "${buildDir}/intermediates/javac/debug", includes: ['**/*.class'])
    def mainSrcDir = "${project.projectDir}/src/main/java"

    classDirectories.setFrom(files([debugClassDir]))
    sourceDirectories.setFrom(files([mainSrcDir]))
    executionData.setFrom(fileTree(dir: buildDir, includes: [
        'jacoco/testDebugUnitTest.exec',
        'outputs/code-coverage/connected/*coverage.ec' // 若包含UI测试需保留,否则可删除
    ]))
}

2. 检查任务依赖与执行顺序

确保codeCoverageReport任务依赖了正确的测试任务:

  • 仅单元测试:依赖testDebugUnitTest
  • 包含UI测试:需追加connectedDebugAndroidTest

如果执行./gradlew codeCoverageReport时测试任务未自动执行,可先手动运行测试:

./gradlew testDebugUnitTest

再重新生成报告。

3. 确认报告输出路径

默认情况下,XML报告生成在app/build/reports/jacoco/codeCoverageReport/codeCoverageReport.xml,可能只是你没找对位置。如果需要自定义输出路径,可在配置中指定:

reports {
    xml.destination file("${buildDir}/reports/jacoco/sonar/coverage.xml") // 自定义XML路径,方便SonarQube读取
    html.destination file("${buildDir}/reports/jacoco/html")
}

4. 通过日志排查问题

执行带日志的任务命令,查看是否有错误提示:

./gradlew codeCoverageReport --info

重点关注日志中关于Jacoco执行数据(*.exec文件)、类文件路径的报错,比如找不到执行数据会导致报告生成不完整。

5. 验证AGP与Jacoco版本兼容性

AGP 7.x及以上版本建议使用Jacoco 0.8.7+,在项目根build.gradle中指定兼容版本:

buildscript {
    dependencies {
        classpath 'org.jacoco:org.jacoco.core:0.8.10'
    }
}

内容的提问来源于stack exchange,提问作者Denis Jung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:05:01