Skip to content

Instantly share code, notes, and snippets.

@frogermcs
Created January 9, 2019 18:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save frogermcs/81353edc1269e6e888d2ba6c7e22a8a4 to your computer and use it in GitHub Desktop.
Save frogermcs/81353edc1269e6e888d2ba6c7e22a8a4 to your computer and use it in GitHub Desktop.
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 so that the for loop below can continue.
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"
def unitTestCoverageTaskName = "${testTaskName}Coverage"
def excludedFiles = fileTree(
dir: "${project.buildDir}/**/intermediates/javac/${sourcePath}",
excludes: [
'**/R.class', // Android generated classes
'**/R$*.class', // Android generated classes
'**/*Dagger*.*', // Dagger auto-generated code.
'**/*MembersInjector*.*', // Dagger auto-generated code.
'**/*_ViewBinding*.*', // Butterknife auto-generated code.
'**/AutoValue_*.*', // AutoValue auto-generated code.
'**/R2.class', // Butterknife auto-generated code.
'**/R2$*.class', // Butterknife auto-generated code.
'**/BuildConfig.*',
//...
]
)
// Create coverage task for unit tests of form 'test<Flavor><BuildType>Coverage' depending on 'test<Flavor><BuildType>UnitTest'
task "${unitTestCoverageTaskName}"(type: JacocoReport, dependsOn: "$testTaskName") {
group = 'Reporting'
description = "Generate Jacoco coverage reports for the ${sourceName.capitalize()} build. Only unit tests."
def coverageSourceDirs = [
'src/main/java',
"src/$productFlavorName/java",
"src/$buildTypeName/java"
]
classDirectories = excludedFiles
additionalSourceDirs = files(coverageSourceDirs)
sourceDirectories = files(coverageSourceDirs)
executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec")
reports {
xml.enabled = true
html.enabled = true
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment