I have a simple android project with test cases.
ProjNameProject
--build.gradle
--ProjName
----build.gradle
I see that by default android\'
JaCoCo support was added to the Android gradle plugin v0.10 (http://tools.android.com/tech-docs/new-build-system).
Enable in the tested Build Type with testCoverageEnabled = true
android {
jacoco {
version = '0.6.2.201302030002'
}
}
I was able to get JaCoCo coverage working with Robolectric by following http://chrisjenx.com/gradle-robolectric-jacoco-dagger/.
apply plugin: 'android'
apply plugin: 'robolectric'
apply plugin: 'jacoco'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile 'com.android.support:appcompat-v7:19.1.+'
androidTestCompile fileTree(dir: 'libs/test', include: '*.jar')
androidTestCompile 'junit:junit:4.11'
androidTestCompile 'org.robolectric:robolectric:2.3'
androidTestCompile 'com.squareup:fest-android:1.0.+'
}
robolectric {
// Configure the set of classes for JUnit tests
include '**/*Test.class'
exclude '**/*AbstractRobolectricTestCase.class'
// Configure max heap size of the test JVM
maxHeapSize = "2048m"
}
jacoco {
toolVersion = "0.7.1.201405082137"
}
//Define coverage source.
//If you have rs/aidl etc... add them here.
def coverageSourceDirs = [
'src/main/java',
'src/gen'
]
...
// Add JaCoCo test reporting to the test task
// http://chrisjenx.com/gradle-robolectric-jacoco-dagger/
task jacocoTestReport(type: JacocoReport, dependsOn: "testDebug") {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
// Class R is used, but usage will not be covered, so ignore this class from report
classDirectories = fileTree(
dir: './build/intermediates/classes/debug',
excludes: ['**/R.class',
'**/R$*.class'
])
sourceDirectories = files(coverageSourceDirs)
executionData = files('build/jacoco/testDebug.exec')
}
Emma support is planned to be released soon within the new Android build system : http://tools.android.com/tech-docs/new-build-system/roadmap
Up to now there is no official way to run emma with android via gradle. I guess instrumenting can be achieved pretty easily but then, you will miss a way to tell Android to run tests with coverage on. Moreover, there is currently no way (to the best of my knowledge) to pull down emma runtime coverage data from the device.
This project can interest you : https://github.com/stephanenicolas/Quality-Tools-for-Android. It will be updated as soon as emma will make it into Android Gradle plugin.
----UPDATE
This plugin has no chance to work with Android has it uses the Java plugin which is incompatible with Android plugin.