gpt4 book ai didi

android - Jacoco gradle 'exclude'无法在Kotlin的Android项目中使用

转载 作者:行者123 更新时间:2023-12-03 05:29:02 29 4
gpt4 key购买 nike

我在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
}
}
}
}

这是一个错误示例:
/***/***/StudioProjects/***/app/build/generated/source/kapt/debug/com/***/***/App_MembersInjector.java:9: error: cannot find symbol
@Generated(
^
symbol: class Generated

该文件应被排除,但不是。

更新:

经过进一步的调查,似乎是由于我尝试从不涉及jacoco的终端上简单运行测试而引起的错误,因此可能比这更深。

最佳答案

我像这样使用并且像魅力一样工作:

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"
])
}

关于android - Jacoco gradle 'exclude'无法在Kotlin的Android项目中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60166432/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com