I ve been trying to run Jacoco test coverage for quiet some time now. I ve tried several possible solutions reported in these topics:
http://stackoverflow.com/questions/18358297/android-test-code-coverage-with-jacoco-gradle-plugin http://stackoverflow.com/questions/18358297/android-test-code-coverage-with-jacoco-gradle-plugin
http://stackoverflow.com/questions/23795595/how-do-i-get-a-jacoco-coverage-report-using-android-gradle-plugin-0-10-0-or-high http://stackoverflow.com/questions/23795595/how-do-i-get-a-jacoco-coverage-report-using-android-gradle-plugin-0-10-0-or-high
Im running the tests in a emulatated device using genymotion. Here is what i added to build.gradle:
apply plugin: jacoco android{ jacoco { version "0.7.1.201405082137" } buildTypes{ debug{ testCoverageEnabled = true } } } jacoco { toolVersion "0.7.1.201405082137" }
To run it i use something like
./gradlew clean ./gradlew createFLAVOR_NAMEDebugCoverageReport
The relevant generated files/folder are:
/build/intermediates/coverage-instrumented-classes /build/intermediates/jacoco /build/outputs/code-coverage/connected/flavors/MyFlavor/coverage.ec
However, there is nothing @ build/reports/jacoco/test/html/index.html or any html page/code coverage report @ /build/outputs.
I ve also tried to create a dedicated task to build a coverage report:
def coverageSourceDirs = [ src/main/java , ] task jacocoTestReport(type: JacocoReport, dependsOn: "connectedAndroidTestFLAVOR_NAMEDebug") { group = "Reporting" description = "Generate Jacoco coverage reports after running tests." reports { xml.enabled = true html.enabled = true } classDirectories = fileTree( dir: ./build/intermediates/classes/debug , excludes: [ **/R*.class , **/*$InjectAdapter.class , **/*$ModuleAdapter.class , **/*$ViewInjector*.class ]) sourceDirectories = files(coverageSourceDirs) executionData = files("$buildDir/jacoco/connectedAndroidTestMyFlavorDebug.exec") // Bit hacky but fixes https://code.google.com/p/android/issues/detail?id=69174. // We iterate through the compiled .class tree and rename $$ to $. doFirst { new File("$buildDir/intermediates/classes/").eachFileRecurse { file -> if (file.name.contains( $$ )) { file.renameTo(file.path.replace( $$ , $ )) } } } }
Then ./gradlew clean and ./gradlew jacocoTestReport . The output is the same as above, so, no html page with coverage report or any other coverage file.
I m currently using Android Studio v1.0.2 with the latest gradle version. Im fairly new to gradle, so it is possible im missing something basic here.
Thanks