I have a multi-module Android project built by Gradle with the new Android-plugin 0.10+.
All modules are mainly configured from the root project.
I've enable the new code coverage feature. The major problem is that only some modules contain test code and when I enable code coverage on modules that don't contain test code, it fails.
I would like to avoid enabling code-coverage in each module `build.gradle` file so that when someone add test code in a module that wasn't tested, there is no need to modify the `build.gradle`.
I ended up with the following code where code coverage is enabled only when the `androidTest` `sourceSet` contains at least one .java source file. It works as expected, but I'm wondering if there is a nicer way of doing this.
Here is the relevant portion of the root project `build.gradle` script:
configure(subprojects.findAll()) {
if(it.name.equals('MyApp')){
apply plugin: 'android'
}else{
apply plugin: 'android-library'
}
android {
...
//my question is really about the follong 4 lines :
//is there a simpler way to get java source file count in the androidTest sourceSet ?
def androidTestJavaSourceFileCount = 0
sourceSets.androidTest.allJava.each {
androidTestJavaSourceFileCount ++
}
println("androidTestJavaSourceFileCount in androidTest for module $project.name : $androidTestJavaSourceFileCount")
buildTypes {
debug {
testCoverageEnabled = androidTestJavaSourceFileCount > 0
}
}
jacoco {
version = '0.6.2.201302030002'
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
}