前言
目前安卓下使用gradle+jacoco的方案大致有三种,前两种为自动,第三种为手工。这里将对第三种方案下收集手工代码覆盖率中遇到的问题进行描述和解决。
PS:本文不会编写完整的教程,仅针对instrument 方式教程中所存在问题进行补充。若还存在问题,请留言或邮箱jin1ming@foxmail.com。
排坑
本次工作在MacOX 10.14.6与Android Studio 4.0下。系统应当都兼容吧,AS版本只要不是太旧应该就可以。
gradle版本
gradle插件版本和gradle版本,不能太高也不能太低,经尝试最适合的版本为:
Android Gradle Plugin Version 3.5.0
Gradle Version 5.5
修改建议在AS中File->Project Structure中进行:
屏幕快照 2020-07-03 上午11.35.59.png
生成html报告的gradle脚本任务
陈年教程,应该是因为AS更新后,目录发生了变化,需要自己修改下:
原:
task jacocoTestReport(type: JacocoReport) {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree(
dir: './build/intermediates/app_classes/debug',
excludes: ['**/R*.class',
'**/*$InjectAdapter.class',
'**/*$ModuleAdapter.class',
'**/*$ViewInjector*.class'
])
sourceDirectories = files(coverageSourceDirs)
executionData = files("$buildDir/outputs/code-coverage/connected/coverage.ec")
doFirst {
new File("$buildDir/intermediates/app_classes/").eachFileRecurse { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
将classes目录修改后:
task jacocoTestReport(type: JacocoReport) {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree(
dir: './build/intermediates/javac/debug/classes',
excludes: ['**/R*.class',
'**/*$InjectAdapter.class',
'**/*$ModuleAdapter.class',
'**/*$ViewInjector*.class'
])
sourceDirectories = files(coverageSourceDirs)
executionData = files("$buildDir/outputs/code-coverage/connected/coverage.ec")
doFirst {
new File("$buildDir/intermediates/javac/debug/classes/").eachFileRecurse { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}