Android :手工覆盖 Jacoco

Jacoco简介

JaCoCo是一个开源的覆盖率工具(官网地址:http://www.eclemma.org/JaCoCo/),它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序等等。
很多第三方的工具提供了对JaCoCo的集成,如sonar、Jenkins等。

Instrumentation

Instrumentation和Acitivity很类似,但是没有图形界面。
可以把它理解为用于监控其他类的工具类。

继承自以下教程

https://blog.csdn.net/qq_27459827/article/details/79514941?utm_source=blogxgwz0
https://blog.csdn.net/niubitianping/article/details/52918809
https://blog.csdn.net/itfootball/article/details/45644159
https://www.jianshu.com/p/02df72937692(这个教程包含demo非常适合学习)

讲一下在这里遇到的问题及处理

1、多渠道打包中获取包名的问题(productFlavors)

关于Android调试的命令
https://www.jianshu.com/p/183ee396d799
可以查看手机目前装了那些instrumentation

adb shell pm list instrumentation

会出现手机目前装了instrumentation列表

instrumentation:com.netease.open.pocoservice.test/android.support.test.runner.AndroidJUnitRunner (target=com.netease.open.pocoservice)

找到自己需要的程序启动,并启动

adb shell am instrument -w -r  com.lightingcontour.lc_jacocosample/.test.JacocoInstrumentation

2、gradle新版本配置生成报告的文件夹

    classDirectories = fileTree(
            dir: '../app/build/intermediates/classes/debug',
            excludes: ['**/R*.class',
                       '**/*$InjectAdapter.class',
                       '**/*$ModuleAdapter.class',
                       '**/*$ViewInjector*.class'
            ])
    sourceDirectories = files(coverageSourceDirs)
    executionData = files("$buildDir/outputs/code-coverage/connected/coverage.ec")

①手动生成buildDir/outputs/code-coverage/connected文件夹
②将低版本gradle的路径进行修改

/app/build/intermediates/classes/debug

改为

/app/build/intermediates/javac/Debug/compileDebugJavaWithJavac/classes
   doFirst {
        new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
            if (file.name.contains('$$')) {
                file.renameTo(file.path.replace('$$', '$'))
            }
        }

改为

   doFirst {
        new File("$buildDir/intermediates/javac/Debug/compileDebugJavaWithJavac/classes/").eachFileRecurse { file ->
            if (file.name.contains('$$')) {
                file.renameTo(file.path.replace('$$', '$'))
            }
        }

你可能感兴趣的:(Android :手工覆盖 Jacoco)