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

Jenkins上Android插桩测试覆盖率报告问题:JaCoCo版本不兼容

解决Android插桩测试JaCoCo版本不兼容导致的覆盖率报告失败问题

我之前也踩过Gradle插件和JaCoCo版本不兼容的坑,结合你用的Gradle插件3.0.1的场景,给你梳理几个可行的解决方案:

1. 先理清版本匹配的核心问题

你可能混淆了两个容易搞混的“版本”:

  • Android Gradle插件(3.0.1)本身依赖特定版本的JaCoCo核心库,3.0.1默认绑定的是JaCoCo 0.7.9
  • Jenkins上的JaCoCo插件版本(你提到的3.0.1)是Jenkins插件自身的版本,和JaCoCo核心库版本不是一回事,它需要和项目生成的覆盖率报告格式兼容

所以第一步要强制项目使用和Gradle插件兼容的JaCoCo核心版本,在app/build.gradle里添加:

jacoco {
    toolVersion = "0.7.9" // 和Gradle 3.0.1完美兼容的版本
}

2. 调整Jenkins JaCoCo插件的配置路径

Android插桩测试(connectedAndroidTest)生成的覆盖率文件路径和普通单元测试不同,你需要在Jenkins的JaCoCo插件设置里指定正确的路径:

  • Path to exec files:填**/coverage.ec(插桩测试生成的二进制覆盖率文件)
  • Path to class directories:填app/build/intermediates/classes/debug(编译后的Debug类文件目录)
  • Path to source directories:填app/src/main/java(项目源码目录)

如果同时要包含单元测试的覆盖率,再把**/testDebugUnitTest.exec添加到exec文件路径里。

3. 自定义Gradle任务生成Jenkins可识别的报告

如果默认任务生成的报告Jenkins解析有问题,可以自定义一个JacocoReport任务,强制生成标准的XML格式报告(Jenkins对XML的兼容性最好)。在app/build.gradle里添加:

task jacocoTestReport(type: JacocoReport, dependsOn: ['connectedDebugAndroidTest', 'testDebugUnitTest']) {
    // 开启XML和HTML报告生成
    reports {
        xml.enabled = true
        html.enabled = true
    }

    // 过滤不需要统计覆盖率的文件
    def excludeFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
    def debugClassDir = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: excludeFilter)
    def mainSourceDir = "${project.projectDir}/src/main/java"

    // 指定源码、类文件和覆盖率数据文件路径
    sourceDirectories.setFrom(files([mainSourceDir]))
    classDirectories.setFrom(files([debugClassDir]))
    executionData.setFrom(fileTree(dir: buildDir, includes: [
            'outputs/code-coverage/connected/debugAndroidTest/coverage.ec',
            'jacoco/testDebugUnitTest.exec'
    ]))
}

然后在Jenkins的构建步骤里,先执行:

./gradlew clean connectedDebugAndroidTest jacocoTestReport

再让JaCoCo插件读取生成的XML报告,路径是app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml

额外注意事项

  • 如果你的项目开启了ProGuard,要在混淆规则里保留测试相关的类,不然覆盖率会缺失:
    -keep class com.yourpackage.** { *; } // 替换成你的项目包名
    -keep class * extends android.test.InstrumentationTestCase
    
  • 确保Jenkins用户有项目build目录的读写权限,不然报告生成会失败

内容的提问来源于stack exchange,提问作者Jean Creuzé des Châtelliers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:43:35