gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:10:19 26 4
gpt4 key购买 nike

我正在尝试使用 Gradle Android 插件 0.10.2 获取测试覆盖率报告。但是在运行一些测试后我仍然无法获得覆盖率报告。 (已连接AndroidTest)。

我的主要模块的 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.+'
}

项目的 build gradle 的 buildscript 部分是:

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

从终端运行 gradlew connectedAndroidTest 后,我可以在 中找到 coverage-instrumented-classescode-coverage 文件夹>build 文件夹。但我在 reports 文件夹中找不到 coverage 文件夹。 (只有我能看到的是 androidTests 文件夹)

获取 jacoco 报道报告有什么遗漏吗?

最佳答案

经过数百次搜索以获得覆盖率报告的答案,我终于找到了我想要的确切答案。

来自 this blog post ,我发现 gradlew createDebugCoverageReport 创建了 jacoco 覆盖率报告。

另外,来自 gradle 插件 source code ,插件默认使用jacoco 0.6.2.201302030002。 (因此,如果您要使用默认版本,jacoco 版本定义不是必需的)

总的来说,使用 Android gradle 插件获取 jacoco 覆盖率报告的ESSENTIAL 步骤是:

  1. Android gradle 插件版本 0.10.0 或更高版本(通常在项目的 build.gradle 中)
  2. testCoverageEnabled true 添加到您想要的构建类型(即 debug)
  3. 运行 $ gradlew createDebugCoverageReportgradlew connectedCheck 以获取 jacoco 覆盖率报告。

您可以在 build/reports/coverage/{buildType} 找到您的覆盖率报告。 (即 build/reports/coverage/debug 用于调试构建)

(从@odiggity 的评论中添加多种口味)

如果您的项目使用多 flavor 配置,请改用 create{flavorName}CoverageReport。覆盖率报告将在 build/reports/coverage/{flavorName}/{buildType} 生成。

带有 debug 构建类型的 flavor krInternal 示例:

  • 命令:./gradlew createKrInternalDebugCoverageReport
  • 报告生成于:build/reports/coverage/krInternal/debug

提示:

由于您只能使用 emulator具有 root 权限的设备 获得覆盖率报告,因此在常规(非根)设备:

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 构建脚本以获得代码覆盖率

将此 block 包含在 build.gradle 中,适用于所有模块(库、示例等)

android {
lintOptions {
abortOnError false
}
}

下面是.travis-ci.yml文件

language: 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)

关于android - 如何使用 Android gradle 插件 0.10.0 或更高版本获取 jacoco 覆盖率报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com