美文网首页
Android :手工覆盖 Jacoco

Android :手工覆盖 Jacoco

作者: 清白山人 | 来源:发表于2019-08-05 16:11 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/mvfmdctx.html