Android - Jacoco 无法正确生成 xml 报告(已解决)
Posted
技术标签:
【中文标题】Android - Jacoco 无法正确生成 xml 报告(已解决)【英文标题】:Android - Jacoco does not generate xml report properly(solved) 【发布时间】:2021-06-15 21:01:35 【问题描述】:我们已将 JaCoCo 插件集成到我们的 android 项目中,以通过 SonarQube 测量代码覆盖率。但是,它无法测量。因为 SonarQube 期望覆盖报告为 XML 格式。我们在 build.gradle(module) 中添加了一个自定义的 jacocoTestReport 任务。它生成一个 xml 文件,但不包含任何覆盖信息。你遇到过这样的问题吗?如果有,有什么解决办法吗?
build.gradle(root)
classpath "org.jacoco:org.jacoco.core:0.8.5"
build.gradle(模块)
apply plugin: 'jacoco'
...
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest'])
reports
xml.enabled = true
html.enabled = true
def fileFilter = ['**/R.class',
'**/R$*.class',
'**/BuildConfig.*',
'**/Manifest*.*',
'**/*Test*.*',
'android/**/*.*']
def debugTree = fileTree(dir: "$buildDir/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "$project.projectDir/src/main/java"
getSourceDirectories().setFrom(files([mainSrc]))
getClassDirectories().setFrom(files([debugTree]))
getExecutionData().setFrom(fileTree(dir: "$buildDir", includes: [
"jacoco/testDebugUnitTest.exec",
"outputs/code-coverage/connected/*coverage.ec"
]))
输出:
【问题讨论】:
【参考方案1】:你的 gradle 版本是什么? gradle 6.4+ 似乎有一些问题 https://github.com/gradle/gradle/issues/14132
【讨论】:
嗨@flavio-franco,我们的gradle版本是6.2.2 @tugcekolcu 我已经按照这些配置配置了 jacoco 和声纳 medium.com/wandera-engineering/… 我使用 gradle 6.3 没有问题。 嗨@flavio-franco,我已经解决了这个问题。目录的路径不正确。我刚刚添加了解决方案。谢谢你的兴趣。 :)【参考方案2】:经过一番谷歌搜索,我终于解决了这个问题。源目录和类目录的路径不正确。正确的路径应该是这样的:
def javaClasses = fileTree(dir: variant.javaCompileProvider.get().destinationDir,
excludes: fileFilter)
def kotlinClasses = fileTree(dir: "$buildDir/tmp/kotlin-classes/$variantName",
excludes: fileFilter)
classDirectories.setFrom(files([
javaClasses,
kotlinClasses
]))
def variantSourceSets = variant.sourceSets.java.srcDirs.collect it.path .flatten()
sourceDirectories.setFrom(project.files(variantSourceSets))
问候,
【讨论】:
以上是关于Android - Jacoco 无法正确生成 xml 报告(已解决)的主要内容,如果未能解决你的问题,请参考以下文章
Android+jacoco实现代码覆盖率最正确的实现方式,没有之一!