kailLinux 所支持的网卡的型号 最好是TP-link 或IP-Time
最满意答案
在数百次搜索覆盖报告的答案后,我终于找到了我想要的确切答案。
在这篇博文中 ,我发现
gradlew createDebugCoverageReport
创建了jacoco覆盖率报告。另外,从gradle插件源代码中 ,该插件默认使用jacoco 0.6.2.201302030002。 (因此,如果要使用默认版本,则不需要jacoco版本定义 )
总之,使用Android gradle插件获取
jacoco
覆盖率报告的基本步骤是:
- Android Gradle插件版本为0.10.0或更高版本(通常在您项目的
build.gradle
)- 将
testCoverageEnabled true
添加到您想要的构建类型(即debug
)- 运行
$ gradlew createDebugCoverageReport
或gradlew connectedCheck
以获得jacoco
覆盖率报告。您可以在
build/reports/coverage/{buildType}
找到您的覆盖率报告。 (即为调试版本build/reports/coverage/debug
)(从@ odiggity的评论中添加多种风味的情况)
如果您的项目使用多风格配置,请改用
create{flavorName}CoverageReport
。 覆盖报告将在build/reports/coverage/{flavorName}/{buildType}
。具有调试版本类型的风味krInternal的示例:
- 命令:
./gradlew createKrInternalDebugCoverageReport
- 报告详述如下:
build/reports/coverage/krInternal/debug
小费 :
由于您只能使用
device with root permission
的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.
Over the hundreds of times searching the answer to getting a coverage report, I finally found an exact answer what I want.
From the this blog post, I found that
gradlew createDebugCoverageReport
creates the jacoco coverage report.Also, from the gradle plugin source code, the plugin uses jacoco 0.6.2.201302030002 by default. (therefore, jacoco version definition is not required if you are going to use a default version)
In summary, the ESSENTIAL steps to get a
jacoco
coverage report with Android gradle plugin are:
- Android gradle plugin version 0.10.0 or higher (typically in your project's
build.gradle
)- add
testCoverageEnabled true
to the build type you want (i.e.debug
)- run
$ gradlew createDebugCoverageReport
orgradlew connectedCheck
to get ajacoco
coverage report.You can find your coverage report at the
build/reports/coverage/{buildType}
. (i.e.build/reports/coverage/debug
for debug build)(Add multi-flavor case from @odiggity's comment)
If your project uses multi-flavor configuration, use
create{flavorName}CoverageReport
instead. The coverage report will be generated atbuild/reports/coverage/{flavorName}/{buildType}
.Example for flavor krInternal with debug build type:
- Command:
./gradlew createKrInternalDebugCoverageReport
- Report is genarated at:
build/reports/coverage/krInternal/debug
Tip :
Since you can only get a coverage report with the
emulator
anddevice with root permission
, you'll get following error after running a command on the regular(non-rooted) device: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.
Travis-CI build script to get code coverage
Include this block in build.gradle, for all modules (library, sample, etc)
android { lintOptions { abortOnError false } }
Below is the
.travis-ci.yml
filelanguage: android jdk: oraclejdk8 sudo: required android: components: # Uncomment the lines below if you want to # use the latest revision of Android SDK Tools - tools - platform-tools # The BuildTools version used by your project - build-tools-28.0.3 # The SDK version used to compile your project - android-28 - android-22 - add-on # Additional components - extra-google-google_play_services - extra-android-support - extra-google-m2repository - extra-android-m2repository # Specify at least one system image, # if you need to run emulator(s) during your tests - sys-img-armeabi-v7a-android-22 licenses: - 'android-sdk-preview-license-52d11cd2' - 'android-sdk-license-.+' - 'google-gdk-license-.+' before_cache: - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ cache: directories: - $HOME/.gradle/caches/ - $HOME/.gradle/wrapper/ - $HOME/.android/build-cache before_install: - yes | sdkmanager "build-tools;28.0.3" before_script: - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a -c 100M - emulator -avd test -no-audio -no-window & - android-wait-for-emulator - sleep 180 - adb devices - adb shell input keyevent 82 & script: - ./gradlew build connectedCheck after_success: - bash <(curl -s https://codecov.io/bash)
相关问答
更多-
以下是我如何使用Jacoco : buildscript { repositories { mavenLocal() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+' } } apply plugin: 'com.androi ...
-
在麻烦之后,我决定为此创建一个开源的Gradle插件 。 根build.gradle buildscript { repositories { mavenCentral() // optional if you have this one already } dependencies { classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.8.0' } } apply ...
-
在数百次搜索覆盖报告的答案后,我终于找到了我想要的确切答案。 在这篇博文中 ,我发现gradlew createDebugCoverageReport创建了jacoco覆盖率报告。 另外,从gradle插件源代码中 ,该插件默认使用jacoco 0.6.2.201302030002。 (因此,如果要使用默认版本,则不需要jacoco版本定义 ) 总之,使用Android gradle插件获取jacoco覆盖率报告的基本步骤是: Android Gradle插件版本为0.10.0或更高版本(通常在您项目的bu ...
-
使用命令为您的项目生成覆盖率 ./gradlew clean createDebugCoverageReport 工作得很好: 我唯一改变的是 - 从23到25 buildToolsVersion和从23.0.1到25.0.2 ,因为这是我的版本。 Generation of coverage for your project using command ./gradlew clean createDebugCoverageReport works just fine: The only thing t ...
-
感谢Yannick Welsch : 搜索Google后,阅读Gradle文档并浏览较旧的StackOverflow文章,我在官方论坛上发现了这个答案! jacocoTestReport { afterEvaluate { classDirectories = files(classDirectories.files.collect { fileTree(dir: it, exclude: 'com/blah/**') }) } } ...
-
目前gradle jacoco插件不支持此功能。 您可以在https://issues.gradle.org/browse/GRADLE-2783和https://issues.gradle.org/browse/GRADLE-2854上投票支持此问题。 作为一种解决方法,您可以在自定义任务中解析输出文件。 At the moment this is not supported by the gradle jacoco plugin. You can vote for this issue at https ...
-
当我遇到同样的问题时,你可能已经看过我的评论了。 我找到了groovy插件的网站,其中报告的问题如下: sonar.groovy.binaries仅针对根项目解析一次。 在多模块项目中,属性未在根模块上定义,但仅在叶模块上定义,这会导致丢失覆盖信息。 https://github.com/SonarQubeCommunity/sonar-groovy/issues/52 即使它是为您的模块设置的: “:myspecialsubmodule.sonar.groovy.binaries” - >“/ home ...
-
apply plugin: 'jacoco' def coverageSourceDirs = [ '../app/src/main/java' ] jacoco{ toolVersion = "0.7.4.201502262128" } task jacocoTestReport(type: JacocoReport) { group = "Reporting" description = "Generate Jacoco coverage reports af ...
-
使用gradle为单个单元测试生成Jacoco代码覆盖率报告(Generate Jacoco code coverage report for individual unit tests using gradle)[2022-11-15]
在测试运行期间,Jacoco会对类进行检测并记录所调用的内容。 然后, JacocoReport类型的任务只是获取这些结果,并JacocoReport XML,HTML或CSV报告。 因此,为了得到你想要的东西,你需要添加几个执行单个测试的Test任务,然后添加几个指向不同结果文件的JacocoReport任务,然后你可以在一次运行中生成这些报告。 如果您只想手动执行此操作,我认为您可以像gradlew test --tests HelloWorld.Test1 jacocoTestReport一样调用Gr ... -
我在我的项目中使用这种配置,并且工作正常! apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { applicationId "br.com.acs.app" minSdkVersion 18 targetSdkVersion 21 versio ...