Jacoco gradle'排除'在Kotlin的Android项目中不起作用

问题描述 投票:0回答:1

我在Android Studio中有一个使用kotlin的Android项目,想使用Jacoco报告代码测试范围。我正在使用Dagger,并且希望将这些类从报告中排除。但是,使用excludes不会执行任何操作,并且在尝试运行Jacoco任务有关应排除的文件时出现错误。以下是我的jacoco.gradle文件。

apply plugin: 'jacoco'

jacoco {
    toolVersion = "$versions.jacoco_version"
}

project.afterEvaluate {
    // Grab all build types and product flavors
    def buildTypes = android.buildTypes.collect { type -> type.name }
    def productFlavors = android.productFlavors.collect { flavor -> flavor.name }

// When no product flavors defined, use empty
if (!productFlavors) productFlavors.add('')

productFlavors.each { productFlavorName ->
    buildTypes.each { buildTypeName ->
        def sourceName, sourcePath
        if (!productFlavorName) {
            sourceName = sourcePath = "${buildTypeName}"
        } else {
            sourceName = "${productFlavorName}${buildTypeName.capitalize()}"
            sourcePath = "${productFlavorName}/${buildTypeName}"
        }
        def testTaskName = "test${sourceName.capitalize()}UnitTest"

        // Create coverage task of form 'testFlavorTypeCoverage' depending on 'testFlavorTypeUnitTest'
        task "${testTaskName}Coverage" (type:JacocoReport, dependsOn: "$testTaskName") {
            group = "Reporting"
            description = "Generate Jacoco coverage reports on the ${sourceName.capitalize()} build."

            classDirectories = fileTree(
                    dir: "${project.buildDir}/tmp/kotlin-classes/${sourcePath}",
                    excludes: ['**/R.class',
                               '**/R$*.class',
                               '**/*$ViewInjector*.*',
                               '**/*$ViewBinder*.*',
                               '**/BuildConfig.*',
                               '**/Manifest*.*',
                               '**/*_MembersInjector.*',
                               '**/Dagger*Component.*',
                               '**/Dagger*Subcomponent.*',
                               '**/*Subcomponent$Builder.*',
                               '**/*Module_*Factory.*']
            )

            def coverageSourceDirs = [
                    "src/main/java",
                    "src/$productFlavorName/java",
                    "src/$buildTypeName/java"
            ]
            additionalSourceDirs = files(coverageSourceDirs)
            sourceDirectories = files(coverageSourceDirs)
            executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec")

            reports {
                xml.enabled = true
                html.enabled = true
            }
        }
    }
}
android android-studio gradle kotlin jacoco
1个回答
0
投票

我像这样使用并且像护身符一样工作:

task "${testTaskName}Coverage" (type:JacocoReport,
      dependsOn: ["$testTaskName"]
  ) {
    group = "Reporting"
    description = "Generate Jacoco coverage reports on the ${sourceName.capitalize()} build."
def excludes = [
        '**/R.class',
        '**/R$*.class',
        '**/Manifest*.*',
        'android/**/*.*',
        '**/BuildConfig.*',
        '**/*$ViewBinder*.*',
        '**/*$ViewInjector*.*',
        '**/Lambda$*.class',
        '**/Lambda.class',
        '**/*Lambda.class',
        '**/*Lambda*.class',
        '**/*Module.*',
        '**/*Dagger*.*',
        '**/*_MembersInjector.class',
        '**/Dagger*Component*.class',
        '**/Dagger*Subcomponent*.class',
        '**/*Subcomponent$Builder.class',
        '**/*Module_*Factory.class',
        '**/*MyCustomStuff*.*'
    ]

    classDirectories.from = fileTree(
        dir: "${project.buildDir}/intermediates/classes/${sourcePath}",
        excludes: excludes
    ) + fileTree(
        dir: "${project.buildDir}/tmp/kotlin-classes/${sourceName}",
        excludes: excludes
    )

def coverageSourceDirs = [
        "src/main/java",
        "src/$productFlavorName/java",
        "src/$buildTypeName/java"
    ]
    additionalSourceDirs.from = files(coverageSourceDirs)
    sourceDirectories.from = files(coverageSourceDirs)
    executionData.from = files([
        "${project.buildDir}/jacoco/${testTaskName}.exec"
    ])
}
© www.soinside.com 2019 - 2024. All rights reserved.