当前位置: 移动技术网 > 移动技术>移动开发>Android > 浅析gradle(android)如何一行配置支持代码覆盖测试(jacoco)

浅析gradle(android)如何一行配置支持代码覆盖测试(jacoco)

2018年12月27日  | 移动技术网移动技术  | 我要评论

这行配置就是

testcoverageenabled true

我在前一篇文章中,花了不少时间把gradle的包装去掉,但是真的落地用的时候。发现pitest、cobertura都没有jacoco这么简单的集成&&完整的支持,完整的支持 看起来是一个可以研究的点。

有一篇博客 how to get code coverage during manual testing for android app(下文用 manualjacoco 指代它),里面提到一种方法,就是编译后手动点,在手机上把执行的信息存到文件中,然后再拉回gradle编译出报告。细节方法看连接里的文章吧。好奇gradle到底做了什么?

正文

根据 manualjacoco 做了一波之后,脚本执行的有几行指令

# step 1
# build && apply jacoco offline instrument %% generate apk
./gradlew assembdebug && \
adb install app/build/outputs/apk/debug/app-debug.apk

# step 2
# do manual ui test in android‘phone ,and dump exec message into file

# step 3
# pull exec info ,according local code generate html report
./gradlew connectedandroidtest && \
adb pull /sdcard/coverage.exec app/build/outputs/code-coverage/connected/coverage.exe && \ 
./gradlew jacocotestreport

先打开debug开关,然后从日志来分析

./gradlew assembdebug -d

说几个关键信息

1,用到org.gradle.testing.jacoco.plugins.jacocopluginextension 这个插件
2,配置之后,用到了这里的配置

…/android/sdk/extras/m2repository/org/jacoco/org.jacoco.agent/0.7.9/org.jacoco.agent-0.7.9.pom
…/android/sdk/extras/android/m2repository/org/jacoco/org.jacoco.agent/0.7.9/org.jacoco.agent-0.7.9.pom
…/android/sdk/extras/google/m2repository/org/jacoco/org.jacoco.agent/0.7.9/org.jacoco.agent-0.7.9.pom

3,jacoco的几个jar包好像有被打进dex中,包括

org.jacoco.agent-runtime.jar
org.jacoco.report.jar
org.jacoco.core.jar
org.jacoco.agent.jar
org.jacoco.ant.jar

用as的工具分析下,as -> build -> analyze apk…

这里写图片描述

确实是有把jacoco的代码打进dex包中,所以这里就不用担心分包的问题了。但是很迷的是,因为没有显性的引用,写代码的时候,引用import org.jacoco.agent.rt.rt 会报错,导致这里只能用反射去拿jacoco才能dump执行信息到文件。

所以有几个点:

有没有办法不用反射就能拿到jacoco?或者是只能通过反射调用,有什么好处?

当然是可以有的。但是不这样做,应该是考虑到这个是一个优化功能。正式版本都不会用到。所以做成反射去用是最好的。

jacocopluginextension到底做了什么

直接看代码

// todo
// to be write

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网