背景
使用开发项目gradle 开启testCoverageEnable =true 来插桩生成aar包 但是不知道其jacoco 版本,将其插桩后的aar,放入安卓自动化测试项目中进行测试。 在测试时报错 Error Didn’t find class “org.jacoco.agent.rt.internal_43f5073.Offline”
解决思路
查看官网后发现有Q&A https://www.eclemma.org/jacoco/trunk/doc/faq.html
Why do I get a NoClassDefFoundError or ClassNotFoundException for class org.jacoco.agent[…]Offline? If you use offline instrumentation the instrumented classes get a direct dependency on the JaCoCo runtime. Therefore jacocoagent.jar of the same JaCoCo version must be on the classpath and accessible from by the instrumented classes.
意思就是离线插桩class 是对jacoco runtime 版本有依赖,所以jacocoagent 版本必须和插桩版本一致,并且能被访问。
操作
在jacoco 官网下载command line tool和jacoco-agent-runtime https://repo1.maven.org/maven2/org/jacoco/org.jacoco.cli/0.8.4/ 使用org.jacoco.cli-0.8.4-nodeps.jar 手动插桩aar包,然后将org.jacoco.agent-0.8.4-runtime.jar,本地依赖于安卓自动化测试里(gradle 配置) repository{ flatDir { dirs “${rootDir}/libs” } } dependency{ implementation(name: ‘org.jacoco.agent-0.8.4-runtime’, ext: ‘jar’) } 再运行自动化测试,就不会再报"org.jacoco.agent.rt.internal_43f5073.Offline"
后续
该解决方案都是在本地加依赖解决的,后续查看下是否能将上述2个jacoco 工具包通过gradle 配置来从maven center 获取
|