Android 使用JaCoCo进行代码覆盖率检查2021最新版

生成最后的报告,折腾了一天,记录一下,希望对大家有帮助。

环境(经测试没有发现版本的问题,不过这里还是贴出供参考)

Android Studio Arctic Fox | 2020.3.1 Patch 3

classpath 'com.android.tools.build:gradle:7.0.3'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20'

jacoco.gradle:

apply plugin:'jacoco'

jacoco{
    toolVersion = "0.8.7"
}

android {
    buildTypes {
        debug{
            testCoverageEnabled = true
        }
    }
}

主工程(或library)的build.gradle引入:

plugins {
    id 'com.android.application'
    id 'kotlin-android'

}

apply from: "jacoco.gradle"

android {...}
...

使用:

使用createDebugCoverageReport命令即可,报告位置如下

Android 使用JaCoCo进行代码覆盖率检查2021最新版

踩坑记录

  • 网上有很多自己保存.ec文件的,或者是 Unexpected SMAP line:错误、jacoco 0.8.7版本等问题的,经过反复测试,在上诉环境中已经不需要那么麻烦了。
  • 必须包含一个Test是对src目录的类进行测试的,否则是生成不了覆盖报告的。
  • kotlin代码,可能存在运行问题,可以用最简单的项目(可以参考下面的测试样例代码结构)进行对比发现问题。

测试样例代码结构:

Src:

MainActivity:只有onCreate方法,并且xml只有一个textview显示。
ShowActivity:只有onCreate方法,并且xml只有一个LinearLayout布局。

androidtest:

MainActivityTest:只有一个Test如下

@Test
fun jump() {
    val context: Context =
        InstrumentationRegistry.getInstrumentation().targetContext //获取Context上下文
    val intent = Intent(context, ShowActivity::class.java)
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    context.startActivity(intent)
}
上一篇:Kotlin入门笔记


下一篇:2020Android开发现状分析,字节跳动Android架构师学习笔记