如何使用Android gradle插件0.10.0或更高版本获得jacoco覆盖率报告?

我正在尝试使用Gradle Android插件0.10.2来获得testing覆盖率报告。 但是运行一些testing后我仍然无法获得覆盖报告。 (connectedAndroidTest)。

我的主要模块的build.gradle是:

apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion "19.0.3" defaultConfig { minSdkVersion 8 targetSdkVersion 19 versionCode 1 versionName "1.0" } buildTypes { debug { testCoverageEnabled true } release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:19.+' } 

而项目构buildgradle的buildscript部分是:

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.10.+' } } 

一旦我从terminal运行gradlew connectedAndroidTest ,我可以在build文件夹中findcoverage-instrumented-classescode-coverage文件夹。 但是我无法在reports文件夹中findcoverage文件夹。 (只有我能看到的是androidTests文件夹)

是否有什么缺less获得雅可比覆盖报告?

经过数百次search报道的答案,我终于find了我想要的确切答案。

从这篇博文中 ,我发现gradlew createDebugCoverageReport创build了jacoco覆盖率报告。

此外,从gradle插件源代码 ,插件默认使用jacoco 0.6.2.201302030002。 (因此,如果要使用默认版本,则不需要jacoco版本定义

总之,使用Android gradle插件获取jacoco覆盖率报告的基本步骤是:

  1. Android Gradle插件0.10.0或更高版本(通常在您的项目的build.gradle
  2. 添加testCoverageEnabled true你想要的构buildtypes(即debug
  3. 运行$ gradlew createDebugCoverageReportgradlew connectedCheck来获得一个jacoco覆盖率报告。

您可以在build/reports/coverage/{buildType}find您的覆盖率报告。 (即为debugging版本build/reports/coverage/debug

(从@ odiggity的评论添加多种风味的情况下)

如果您的项目使用多风格configuration,请改用create{flavorName}CoverageReport 。 覆盖率报告将在build/reports/coverage/{flavorName}/{buildType}

具有debugging版本types的风味krInternal示例:

  • 命令: ./gradlew createKrInternalDebugCoverageReport
  • 报告genarated: build/reports/coverage/krInternal/debug

小费 :

由于您只能通过emulatordevice with root permission获取覆盖率报告,因此在常规(无根)设备上运行命令后,您将得到以下错误:

 05:48:33 E/Device: Error during Sync: Permission denied java.io.IOException: com.android.ddmlib.SyncException: Permission denied at com.android.builder.testing.ConnectedDevice.pullFile(ConnectedDevice.java:114) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:158) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:42) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:695) Caused by: com.android.ddmlib.SyncException: Permission denied at com.android.ddmlib.SyncService.doPullFile(SyncService.java:511) at com.android.ddmlib.SyncService.pullFile(SyncService.java:320) at com.android.ddmlib.Device.pullFile(Device.java:849) at com.android.builder.testing.ConnectedDevice.pullFile(ConnectedDevice.java:107) ... 10 more :myDirections:connectedAndroidTest FAILED FAILURE: Build failed with an exception. 

必须添加一个答案,而不是评论,因为我的声望低于50 …

我想补充的是:

Google发布了修复令人讨厌的“VerifyError”( 链接 )问题的新构build工具。

如果遇到“VerifyError”问题,请尝试更改Gradle中的设置以使用最新的构build工具。 例如,

 android { ...... buildToolsVersion '21.1.1' ..... } 

由于21.0.0构build工具是bug,请使用大于21.0.0的版本。 我使用21.1.1。

我为此创build了一个开源插件 。

根build.gradle

 apply plugin: "com.vanniktech.android.junit.jacoco" buildscript { repositories { mavenCentral() } dependencies { classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.3.0' } } 

然后简单地执行

 ./gradlew jacocoTestReportDebug // or jacocoTestReportRelease 

它将运行JUnittesting,然后在debugging构buildtypes的相应构build目录中为您提供xml和html格式的Jacoco输出。

如果您想使用与默认版本不同的版本,请添加

 jacoco { version = '0.7.3.201502191951' } 

在你的应用程序的build.gradleandroid标签内。

一种find最新版本号的方法:在JCenter上search“org.jacoco:jacoco”。

Gradle已经内置了对生成testing覆盖率报告的支持,我们不需要创build任何额外的configuration或添加任何插件来生成testing覆盖率报告。 基本上,我们唯一需要做的就是在build.gradle文件中将testCoverageEnabled参数设置为true ,如下所示:

 android { buildTypes { debug { testCoverageEnabled = true } } } 

接下来,我们可以从CLI执行下面的Gradle任务:

 ./gradlew createDebugCoverageReport 

在Windows上,我们可以像这样执行它:

 gradlew.bat createDebugCoverageReport 

任务将分析我们在/src/main/java/目录中的项目的代码以及放置在/src/androidTest/java/目录下的unit testing。 执行此任务后,我们可以在模块的以下目录中findtesting覆盖率报告:

 /build/outputs/reports/coverage/debug/ 

当我们打开index.html文件时,我们可以看到来自testing覆盖的可视化报告,可以在Web浏览器中查看。

它看起来如下图所示。

在这里输入图像说明

有关Android应用程序testing覆盖率报告的文章http://blog.wittchen.biz.pl/test-coverage-report-for-android-application/