Android 如何从Jacoco代码覆盖范围中排除片段

Android 如何从Jacoco代码覆盖范围中排除片段,android,code-coverage,jacoco,Android,Code Coverage,Jacoco,我使用了下面的代码来排除片段,但我无法从jacoco代码覆盖范围中排除片段,请帮助我 task jacocoTestReport(type: JacocoReport) { def coverageSourceDirs = [ 'src/main/java' ] group = "Reporting" description = "Generates Jacoco coverage reports" reports { xml { enabled =

我使用了下面的代码来排除片段,但我无法从jacoco代码覆盖范围中排除片段,请帮助我

task jacocoTestReport(type: JacocoReport) {

def coverageSourceDirs = [
        'src/main/java'
]

group = "Reporting"
description = "Generates Jacoco coverage reports"
reports {
    xml {
        enabled = true
        destination "${buildDir}/reports/jacoco/jacoco.xml"
    }
    csv.enabled false
    html {
        enabled true
        destination "${buildDir}/jacocoHtml"
    }
}

classDirectories = fileTree(
        dir: 'build/intermediates/classes/debug',
        excludes: ['**/R.class',
                   '**/R$*.class',
                   '**/BuildConfig.*',
                   '**/Manifest*.*',
                   '**/*Fragment*.*'
        ]
)

sourceDirectories = files(coverageSourceDirs)
additionalSourceDirs = files(coverageSourceDirs)
executionData = files('build/outputs/code - coverage/connected/flavors/smartcompanion/coverage.ec')
}
我们使用了以下命令:-

gradlew connectedCheck
gradlew connectedAndroidTest
gradlew connectedDubugAndroidTest

每次在覆盖率报告中,我们都可以看到片段。

还有另一种排除文件的方法,您可以将其过滤掉:

classDirectories = fileTree(
    dir: 'build/intermediates/classes/debug',
    excludes: ['**/R.class',
               '**/R$*.class',
               '**/BuildConfig.*',
               '**/Manifest*.*',
               '**/*Fragment*.*'
    ]
).filter ({file -> !file.name.contains('Fragment')})
由于某种原因,我也无法排除片段。我找不出哪里出了问题。不过,按名字过滤它们还是有效的。所以这感觉像是一个解决办法,但至少我可以继续前进,完成我的工作


我还注意到,在Android上,Gradle和jacoco插件的不同版本并不总是非常兼容。因此,尝试降级(或升级)也可能会有所帮助

你解决过这个问题吗?我也有同样的问题