Jacoco将coverage.ec转换为没有coverage.em的报告

sri*_*sri 4 android emma jacoco android-studio android-gradle-plugin

我可以按照以下步骤获取代码覆盖率报告,

  1. 启用所需构建类型的覆盖范围(例如,调试)

    buildTypes { debug { testCoverageEnabled true } }

  2. 应用Jacoco插件并设置版本

    apply plugin: 'jacoco' jacoco { version "0.7.1.201405082137" }

  3. ./gradlew createDebugCoverageReport

  4. 运行connectedAndroidTest中的所有测试,并基于它们生成覆盖率报告.我可以在中找到报道报道

    app/build/outputs/reports/coverage/{buildType}/index.html

和一个coverage.ec文件

app/build/outputs/code-coverage/connected/coverage.ec

但是没有jacoco.exec,因为我从Android Instrumentation而不是Robolectric测试用例运行.

当我从ADB运行仪器(我猜这仍然使用Emma)如下所示,我得到一个coverage.ec文件,如下所示,

$ adb shell am instrument -w -e coverage true -e coverageFile /sdcard/coverage.ec com.sample.helloworld.test/.Runner
....
OK (4 tests)

Generated code coverage data to /sdcard/coverage.ec
Run Code Online (Sandbox Code Playgroud)

但由于coverage.em文件丢失,我无法将coverage.ec转换为使用emma报告,

java -cp ~/adt-bundle-mac-x86_64-20130729/sdk/tools/lib/emma_device.jar emma report -r html -in \
coverage.em,myFile.ec,myapp_coverage1.ec -sp /path/to/myapp/src
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题?

小智 8

只需使用"coverage.ec"作为".exec"文件,它对我有用

这就是谷歌在Android Gradle Plugin源代码中所做的.

public static final String FILE_COVERAGE_EC ="coverage.ec";

在com.android.builder.internal.testing包下的SimpleTestCallable.java中.

  • 哇,是的,您只需将文件重命名为`coverage.exec`,它就可以在"显示覆盖率数据"下的Android Studio(2.0)中进行选择,您可以在编辑器窗口中正确显示所有代码. (5认同)
  • @NicolasGramlich我将其更改为exec并通过Show Coverage Data打开它 - 但它显示所有代码的0% (2认同)
  • http://blog.houzz.com/post/158160064293/android-code-coverage-with-jacoco (2认同)

Uri*_*kel 5

我写了一篇关于同一场景和我的解决方案的文章.你可以在这里阅读.要回答此特定问题,您应该执行以下步骤:将gradle更改为:

apply plugin: 'jacoco'
jacoco {
   toolVersion = '0.7.5.201505241946'
}
Run Code Online (Sandbox Code Playgroud)

第二次下载这个罐子.继续你所做的事情,直到你有coverage.ec文件.然后,当你运行它:

java -jar android-jacoco-the-missing.jar -f /path/to/coverage.ec -p ./path/to/android/project
Run Code Online (Sandbox Code Playgroud)

就是这样!jar将生成一个包含代码覆盖率的文件夹.

另一种选择是将coverage.ec与Jenkins Jacoco插件一起使用.但是为此你需要让Jenkins开启.