AndroidStudio中使用Jacoco统计Android应用程序代码覆盖率

最近在做针对Android应用程序代码覆盖率的统计工作,刚开始从论文中看到大多数研究者采用emma这个工具来统计Android应用程序代码覆盖率,但是我看过一些资料后发现emma只能对eclipse中的Android项目进行插装,由于AndroidStudio(以下简称AS)项目结构和eclipse项目结构不同,因此无法用ant工具来编译AS项目(当然如果你精通ant工具,应该可以实现对AS项目的编译)。

看了很多参考文章,也入了很多坑,过程虽然艰苦,但最后还是达到了目的,下面进入正题。

一 准备文件

要使用的插装文件的下载地址:http://download.csdn.net/detail/cxq234843654/9693789

二 插装

2.1 添加插装文件

假设项目的包名为com.lzn.love.jyy,首先新建一个名为jacoco的包,之后将下载好的五个java文件放到jacoco包中

2.2 修改java文件

将InstrumentedActivity.java文件中类InstrumentedActivity的父类改为项目的入口Activity

2.3 配置AndroidManifest.xml文件

在原有的AndroidManifest.xml中添加如下代码:

<instrumentation
        android:handleProfiling="true"
        android:label="JacocoInstrumentation"
        android:name=".jacoco.JacocoInstrumentation"
        android:targetPackage="com.lzn.love.jyy"/>

<receiver android:name=".jacoco.JacocoStopBroacast">
      <intent-filter>
            <action android:name="com.lzn.love.jyy.jacoco.JacocoStopBroacast"/>
      </intent-filter>
</receiver>
<activity
      android:label="InstrumentationActivity"
      android:name=".jacoco.InstrumentedActivity"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2.4 配置gradle文件

在gradle文件中添加如下代码:

apply plugin: 'jacoco'

在buildTypes中添加如下代码:

debug {
    testCoverageEnabled = true
}

之后添加如下代码(和android平级):

def coverageSourceDirs = [
        '../app/src/main/java'
]
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/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/classes/").eachFileRecurse { file ->
            if (file.name.contains('$$')) {
                file.renameTo(file.path.replace('$$', '$'))
            }
        }
    }
}

三 运行并获取结果

1 在Android Studio的右侧,点击gradle图标,app->Tasks->install->installDebug,双击运行installDebug,之后可以看到相应的app便安装在设备中。


2 之后在控制台运行 adb shell am instrument com.lzn.love.jyy/.jacoco.JacocoInstrumentation,如无意外便会看到app被打开,此时你便可以进行手工或自动测试了。

3 测试完成之后有两种方法可以生成代码覆盖率测试报告

(1)测试完成后通过操作来退出app来生成coverage.ec文件

(2)通过向控制台发送 adb shell am broadcast -a com.lzn.love.jyy.jacoco.JacocoStopBroacast 来生成coverage.ec文件

4 在gradle projects视图下,app->Tasks->verification->createDebugCoverageReport,双击createDebugCoverageReport,此番操作后会在app/build/outputs下生成code-coverage目录


5 将生成的coverage.ec(保存在sd卡中)文件放入app\build\outputs\code-coverage\connected目录中

6 在gradle projects视图下,app->Tasks->reporting->jacocoTestReport,双击jacocoTestReport生成代码覆盖率报告,生成成功后便可在build\reports\jacoco\jacocoTestReport\html文件夹下,打开index.html就可以查看了


四 参考资料

http://blog.csdn.net/cxq234843654/article/details/53337935#comments;

http://www.dzwanli.com.cn/?p=1374

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值