Android开发环境和Jenkins CI集成Jacoco

本文介绍如何在Android项目中集成Jacoco进行代码覆盖率测试,包括Gradle配置、任务创建及Jenkins集成流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android开发环境集成
  1. 集成Jacoco Plugin
    在Project的build.gradle中添加:
 dependencies {
        xxx
        //新增
        classpath "org.jacoco:org.jacoco.core:0.8.2"
    }

在App模块的build.gradle apply plugin

    project.plugins.apply('jacoco')

在apply完plugin后,通过执行.gradlew clean testDebugUnitTest就会在build目录生成jacoco/testDebugUnitTest.exec,涵盖了测试coverage的信息。通过第2步,创建jacocoTestReport task会根据该文件和一些configuration生成Html报告。
2. 创建jacocoTestReportTask和配置jacoco(在高版本的jacoco和apply了java plugin的project自动创建该Task)

project.jacoco.toolVersion '0.8.2'
project.android.buildTypes {
    //toggle for report only
    debug {
        testCoverageEnabled true
    }

    release {
        testCoverageEnabled false
    }
}

//如果集成Jenkins Pipeline,只需在Jenkins上安装Jacoco plugin,并且使用下面的Test Stage即可,无需执行jacocoTestReport task
//stage('Test') {
//    steps {
//        sh './gradlew -p ${project} testDebugUnitTest'
//        jacoco(
//                execPattern: "${project}/build/jacoco/testDebugUnitTest.exec",
//                classPattern: "${project}/build/intermediates/javac/Debug, ${project}/build/tmp/kotlin-classes/Debug",
//                sourcePattern: "${project}/src/main/java, ${project}/src/main/kotlin",
//                exclusionPattern: '**/R.class,**/R$*.class,**/*$ViewInjector*.*,**/*$Companion.*,**/*$ViewBinder*.*,**/BuildConfig.*,**/Manifest*.*,**/*$Lambda$*.*,**/*Module.*,**/*Dagger*.*,**/*MembersInjector*.*,**/*_Provide*Factory*.*,**/*_Factory*.*,**/*$*$*.*'
//        )
//    }
//}
project.tasks.create(
        name: 'jacocoTestReport',
        type: JacocoReport,
        dependsOn: "testDebugUnitTest"
) {
    group = "Reporting"
    description = "Generate Jacoco coverage reports for the ${project.name}."

    def buildDir = project.buildDir
    def coverageSourceDirs = [
            "src/main/java",
            "src/main/kotlin"
    ]
    def fileFilter = [
            '**/R.class',
            '**/R$*.class',
            '**/*$ViewInjector*.*',
            '**/*$ViewBinder*.*',
            '**/*$Companion.*',
            '**/BuildConfig.*',
            '**/Manifest*.*',
            '**/*$Lambda$*.*',
            '**/*Module.*',
            '**/*Dagger*.*',
            '**/*MembersInjector*.*',
            '**/*_Provide*Factory*.*',
            '**/*_Factory*.*',
            '**/*$*$*.*'
    ]
    def javaClasses = fileTree(
            dir: "$buildDir/intermediates/javac/debug",
            excludes: fileFilter
    )
    def kotlinClasses = fileTree(
            dir: "$buildDir/tmp/kotlin-classes/debug",
            excludes: fileFilter
    )
    classDirectories.from(files([javaClasses], [kotlinClasses]))
    additionalSourceDirs.from(files(coverageSourceDirs))
    sourceDirectories.from(files(coverageSourceDirs))
    executionData.from(files("${project.buildDir}/jacoco/testDebugUnitTest.exec"))
    reports {
        xml.enabled = true
        html.enabled = true
    }
}

目前为止,通过执行./gradlew jacocoTestReport就能生成想要的测试报告:
在这里插入图片描述

Android Jenkins CI
  1. Jenkins集成时,针对我们的repo源码,可以不用create jacocoTestReport这个Task,但是需要在Jenkins上安装Jacoco Plugin:
    在这里插入图片描述
    在这里插入图片描述
    然后搜索JaCoCo Plugin,安装并重启Jenkins,
    在Test Stage中添加如下配置:
stage('Test') {
    steps {
        sh './gradlew -p ${project} testDebugUnitTest'
        jacoco(
                execPattern: "${project}/build/jacoco/testDebugUnitTest.exec",
                classPattern: "${project}/build/intermediates/javac/Debug, ${project}/build/tmp/kotlin-classes/Debug",
                sourcePattern: "${project}/src/main/java, ${project}/src/main/kotlin",
                exclusionPattern: '**/R.class,**/R$*.class,**/*$ViewInjector*.*,**/*$Companion.*,**/*$ViewBinder*.*,**/BuildConfig.*,**/Manifest*.*,**/*$Lambda$*.*,**/*Module.*,**/*Dagger*.*,**/*MembersInjector*.*,**/*_Provide*Factory*.*,**/*_Factory*.*,**/*$*$*.*'
        )
    }
}

最后的结果报告:
在这里插入图片描述

Sample

https://github.com/Visualrainy/AndroidJacoco

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值