AndroidStudio中使用Jacoco统计Android应用程序代码覆盖率
2017-05-09 20:50
941 查看
最近在做针对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中添加如下代码:
2.4 配置gradle文件
在gradle文件中添加如下代码:
在buildTypes中添加如下代码:
之后添加如下代码(和android平级):
三 运行并获取结果
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
看了很多参考文章,也入了很多坑,过程虽然艰苦,但最后还是达到了目的,下面进入正题。
一 准备文件
要使用的插装文件的下载地址: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('$ 4000 $', '$')) } } } }
三 运行并获取结果
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
相关文章推荐
- 【android测试】jacoco做功能测试代码覆盖率统计
- 实用Jacoco代码覆盖率Android集成与使用
- 如何使用Jacoco远程统计tomcat服务的代码覆盖率
- android项目的JaCoCo代码覆盖率入门使用
- Android UI测试框架Espresso以及代码覆盖率jacoco的使用
- Android自动化测试代码覆盖率统计
- Android模块化开发中统计aar库的代码覆盖率
- 使用coverage统计python web项目的代码覆盖率
- 使用真机进行IOS功能测试代码覆盖率统计
- 结合junit + ant + emma实现Android项目单元测试代码覆盖率统计
- 使用Jacoco统计tomcat服务的覆盖率(远程or本机)
- (4.5.6.1)Android 代码覆盖率工具使用进阶
- 使用EclEmma统计代码的测试覆盖率 [ 光影人像 东海陈光剑 的博客 ]
- Android获取各个应用程序的缓存文件代码小片段(使用AIDL)
- (4.5.6)Android 代码覆盖率工具使用
- android 应用程序使用统计
- Jacoco是一个Java代码覆盖率统计工具
- 使用EMMA统计Java代码功能测试覆盖率
- Jacoco远程统计代码覆盖率
- [置顶] Android 使用Ant+Emma+Junit收集android代码覆盖率(来自联想的一位同事2012.12.24)