一种可能的解决方法是在所有模块的 build.gradle 文件中添加以下配置:
android { ...
buildTypes {
release {
...
testCoverageEnabled true
}
debug {
...
testCoverageEnabled true
}
}
applicationVariants.all {
variant ->
if (variant.buildType.name == 'release') {
variant.getAssemble().doLast {
applyCoverageReport(variant)
}
} else {
variant.getExtensions()
.getExtraProperties()
.set('android.testInstrumentationRunnerArguments',
android.testInstrumentationRunnerArguments +
["coverage" : "true"])
variant.getAssemble().doLast {
tasks.create(name: "create${variant.name}CoverageReport",
type: JacocoReport) {
group = "Reporting"
description = "Generate Jacoco coverage reports for ${variant.name} build."
reports {
xml.enabled true
html.enabled true
}
additionalSourceDirs.from(
variant.javaCompileProvider.get().getSource().get().srcDirs)
sourceDirectories.from(
files([configurations.compile]) +
files([project.android.sourceSets.main.java.srcDirs]))
classDirectories.from(
files([variant.javaCompileProvider.get().getDestinationDir()]) +
files([configurations.runtimeClasspath]))
executionData.from(
fileTree(dir: "$buildDir/outputs/code_coverage/${variant.dirName}",
includes: [
"*${"$"}{variant.name}*",
"*coverage.ec"
]))
}
}
}
}
...
}
def applyCoverageReport(variant) { def path = "${project.buildDir}/reports/jacoco/${variant.name}/" def file = new File(path) if (!file.exists()) { file.mkdir() } tasks.create(name: "create${variant.name}CoverageReport", type: JacocoReport) { group = "Reporting" description = "Generate Jacoco coverage reports for ${variant.name} build." reports { xml.enabled true html.enabled true } additionalSourceDirs.from( variant.javaCompileProvider.get().getSource().get().srcDirs) sourceDirectories.from( files([configurations.compile]) + files([project.android.sourceSets.main.java.srcDirs])) classDirectories.from( files([variant.javaCompileProvider.get().getDestinationDir()]) + variant.getJavaLibraries().collect { it.jarFile.getAbsoluteFile() } ) executionData.from( fileTree(dir: "$buildDir/outputs/code_coverage/${variant.dirName}", includes: [ "${"$"}{variant.name}", "*coverage.ec