如何使用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-classes
和code-coverage
文件夹。 但是我无法在reports
文件夹中findcoverage
文件夹。 (只有我能看到的是androidTests
文件夹)
是否有什么缺less获得雅可比覆盖报告?
经过数百次search报道的答案,我终于find了我想要的确切答案。
从这篇博文中 ,我发现gradlew createDebugCoverageReport
创build了jacoco覆盖率报告。
此外,从gradle插件源代码 ,插件默认使用jacoco 0.6.2.201302030002。 (因此,如果要使用默认版本,则不需要jacoco版本定义 )
总之,使用Android gradle插件获取jacoco
覆盖率报告的基本步骤是:
- Android Gradle插件0.10.0或更高版本(通常在您的项目的
build.gradle
) - 添加
testCoverageEnabled true
你想要的构buildtypes(即debug
) - 运行
$ gradlew createDebugCoverageReport
或gradlew 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
小费 :
由于您只能通过emulator
和device 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.gradle
的android
标签内。
一种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/