Gradle Android plugin 0.10.2を使用して、テストカバレッジレポートを取得しようとしていますが、いくつかのテストを実行した後でもカバレッジレポートを取得できません。
私のメインモジュールの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.+'
}
プロジェクトのビルドグラドルのbuildscriptセクションは次のとおりです。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.10.+'
}
}
ターミナルからgradlew connectedAndroidTest
を実行すると、build
フォルダー内でcoverage-instrumented-classes
およびcode-coverage
フォルダーを見つけることができます。しかし、coverage
フォルダーにreports
フォルダーが見つかりません。 (私が見ることができるのはandroidTests
フォルダのみです)
Jacocoカバレッジレポートを取得するために不足しているものはありますか?
カバレッジレポートを取得するための答えを検索する何百回にわたって、私は最終的に私が望む正確な答えを見つけました。
このブログ投稿 から、gradlew createDebugCoverageReport
がjacocoカバレッジレポートを作成することがわかりました。
また、gradleプラグイン ソースコード から、プラグインはデフォルトでjacoco 0.6.2.201302030002を使用します。 (したがって、デフォルトのバージョンを使用する場合は、jacocoバージョン定義は不要です)
要約すると、[〜#〜] essential [〜#〜]ステップはAndroidでjacoco
カバレッジレポートを取得しますgradleプラグインは次のとおりです。
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とdebugビルドタイプのフレーバーの例:
./gradlew createKrInternalDebugCoverageReport
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.
コードカバレッジを取得するためのTravis-CIビルドスクリプト
すべてのモジュール(ライブラリ、サンプルなど)に対して、このブロックを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)
オープンソースプラグイン を作成しました。
ルート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
JUnitテストを実行し、デバッグビルドタイプに対応するビルドディレクトリにxmlおよびhtml形式でJacoco出力を提供します。
私の評判は50未満なので、コメントの代わりに回答を追加する必要があります...
私が補足したいのは:
Googleは厄介な「VerifyError」( link )の問題を修正する新しいビルドツールをリリースしました。
「VerifyError」の問題が発生した場合は、最新のビルドツールを使用するようにgradleの設定を変更してください。例えば、
Android {
......
buildToolsVersion '21.1.1'
.....
}
21.0.0ビルドツールにはバグがあるため、21.0.0以降のバージョンを使用してください。 21.1.1を使用します。
デフォルトとは異なるバージョンを使用する場合は、追加します
jacoco {
version = '0.7.3.201502191951'
}
アプリのbuild.gradle
のAndroid
タグ内。
最新バージョン番号を見つける1つの方法: JCenter で「org.jacoco:jacoco」を検索します。
Gradleには、テストカバレッジレポートを生成するためのサポートが既に組み込まれているため、テストカバレッジレポートを生成するために追加の構成を作成したり、プラグインを追加したりする必要はありません。基本的に、行う必要があるのは、次のようにbuild.gradle
ファイルのtestCoverageEnabled
パラメーターをtrue
に設定することだけです。
Android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
}
次に、CLIから次のGradleタスクを実行できます。
./gradlew createDebugCoverageReport
Windowsでは、次のように実行できます。
gradlew.bat createDebugCoverageReport
タスクは/src/main/Java/
ディレクトリにあるプロジェクトのコードと/src/androidTest/Java/
ディレクトリにあるユニットテストを分析します。このタスクを実行した後、モジュールの次のディレクトリでテストカバレッジレポートを見つけることができます。
/build/outputs/reports/coverage/debug/
index.html
ファイルを開くと、テストカバレッジから視覚的なレポートを見ることができ、Webブラウザーで表示できます。
下の画像のようになります。
Android application http://blog.wittchen.biz.pl/test-coverage-report-for-Android-application/ のテストカバレッジレポートに関する記事