浅析gradle(android)如何一行配置支持代码覆盖测试(jacoco)
这行配置就是
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
上一篇: 东营11月好玩的地方大全
下一篇: 枣庄11月好玩的地方大全