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

时间:2015-03-13 18:45:59

标签: android android-studio android-gradle jacoco emma

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

  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

  5. 中的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
    

    但由于缺少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
    

    有没有解决这个问题的方法?

4 个答案:

答案 0 :(得分:7)

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

这就是Google在Android Gradle Plugin源代码中所做的。

public static final String FILE_COVERAGE_EC =“coverage.ec”;

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

答案 1 :(得分:5)

我写了一篇关于同一场景和我的解决方案的文章。 You can read it here。要回答此特定问题,您应该执行以下步骤: 将gradle改为:

apply plugin: 'jacoco'
jacoco {
   toolVersion = '0.7.5.201505241946'
}

第二download this jar。继续你所做的事情,直到你有coverage.ec文件。然后当你运行它时:

java -jar android-jacoco-the-missing.jar -f /path/to/coverage.ec -p ./path/to/android/project

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

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

答案 2 :(得分:0)

删除。从以下命令为我工作

java -jar android-jacoco-the-missing.jar -f /path/to/coverage.ec -p /path/to/android/project

答案 3 :(得分:0)

要将覆盖范围从coverage.ec文件中删除,只需将其重命名为coverage.exec并使用“显示覆盖率数据”选项将其打开

可以在Android Studio中的“ 分析”选项下找到

显示覆盖率数据”。

已通过Android Studio 3.3进行了验证