Android 87% 監測點涵蓋率的日常

Andrew Chen
靠der Cowder
Published in
6 min readMay 24, 2016

(不能再多了

繼上一集「java 87% 監測點涵蓋率的日常」,這集介紹 Android 如何配置。

安裝涵蓋率分析程式 jacoco-android

android 因為 android sdk 的關係,計算可能失準,且有多元產品編譯,所以有人寫了 jacoco for android: jacoco-android

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.dicedmelon.gradle:jacoco-android:0.1.1'
}
}
apply plugin: 'com.android.library'
apply plugin: 'jacoco-android'

產生涵蓋率報表

./gradlew jacocoTestReport

結合 travis 自動提交涵蓋率報表到 Coveralls

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.dicedmelon.gradle:jacoco-android:0.1.1'
classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.6.3'
}
}
apply plugin: 'com.github.kt3k.coveralls'coveralls {
jacocoReportPath "$buildDir/reports/jacoco/jacocoTestDebugUnitTestReport/jacocoTestDebugUnitTestReport.xml"
}
tasks.coveralls { dependsOn 'jacocoTestReport' }

提交到 coveralls .travis.yml:

after_success:
- ./gradlew test jacocoTestReport coveralls

jacoco-android 不支援 retrolambda

那就只好用原生 jacoco plugin 了,不過要簡單處理一下:

apply plugin: 'jacoco'

final jacocoExcludes = [
'**/R*.class',
'**/BuildConfig*',
"**/*Package.class"
]

task jacocoTestReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') {
reports {
xml.enabled = true // for coveralls
html.enabled = true
}

classDirectories = fileTree(dir: 'build/intermediates/classes/debug', excludes: jacocoExcludes)
sourceDirectories = files("src/main/java")
executionData = files("build/jacoco/testDebugUnitTest.exec")

doFirst {
file('build/intermediates/classes/debug').eachFileRecurse { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}

jacoco-coveralls:

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.6.3'
}
}

apply plugin: 'com.github.kt3k.coveralls'

coveralls {
jacocoReportPath "$buildDir/reports/jacoco/jacocoTestReport/jacocoTestReport.xml"
}

提交到 coveralls :

./gradlew test jacocoTestReport coveralls

事實上針對原生 JaCoCo for Android 的配置方案挺多的,這裡只介紹簡短的版本,比較複雜的版本可以參考:

Android 設備涵蓋率報表

針對 Android 設備專用的涵蓋率報表

也就是針對 src/androidTest/ 底下的測項分析,通常結合 emulator

設定:

apply plugin: 'com.android.application'android {
buildTypes {
debug {
testCoverageEnabled true
}
}
}

產生出 Android 設備專用的涵蓋率報表:

./gradlew test createDebugCoverageReport

結合 coveralls

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.6.3'
}
}

apply plugin: 'com.github.kt3k.coveralls'

coveralls {
jacocoReportPath "$buildDir/reports/coverage/debug/report.xml" // Instrumentation
}

提交到 coveralls

./gradlew test createDebugCoverageReport coveralls

--

--