[Android] build.gradle.ktsでJaCoCoを動かす
目次
※ 本記事で紹介しているarturdm/jacoco-android-gradle-pluginを用いる方法は、Gradle 8では動かないようです。Fixed build crash in gradle 8.0に修正のPRが作成されていますが、本日現在、まだマージはされておりません。代わりに、thsaravana/jacoco-android-playgroundを参考にしてGradleのタスクを作成する方法があります。
AndroidのGradleの設定ファイルを build.gradle
から build.gradle.kts
に書き換えた時、JaCoCoをセットアップする方法がわからなかったので頑張って動かしてみました。GradleとJaCoCoについてはよくわかっていないことが多いです。プロジェクトを以下のリポジトリにpushしてあります。
JaCoCoのセットアップのために、Android用のプラグインを作ってくれている方がいたので、利用させていただきました。とても助かりました。ありがとうございます。
プロジェクトのsettings.gradle.kts
Maven Repositoryを追加します。プロジェクトによっては、プロジェクトの build.gradle.kts
に追加する場合もあると思います。
dependencyResolutionManagement {
// 略
repositories {
// 略
maven(url = "https://plugins.gradle.org/m2/")
}
}
プロジェクトのbuild.gradle.kts
プラグインをdependenciesに追加します。
buildscript {
dependencies {
// 追加
classpath("com.dicedmelon.gradle:jacoco-android:0.1.5")
}
}
plugins {
// 略
}
モジュールのbuild.gradle.kts
プラグインを適用し、JaCoCoのバージョン、出力するカバレッジレポートの種別、カバレッジレポートの有効化を行います。
plugins {
// 略
id("com.dicedmelon.gradle.jacoco-android")
}
jacoco {
toolVersion = "0.8.8"
}
tasks.withType<JacocoReport> {
reports {
csv.required.set(false)
html.required.set(true)
xml.required.set(true)
}
}
android {
// 略
buildTypes {
debug {
enableUnitTestCoverage = true
}
// 略
}
// 略
}
dependencies {
// 略
}
カバレッジレポートの出力
ユニットテスト実行後、コマンドを実行します。jacoco~
のコマンドは、プラグインが作ってくれるタスクです。
$ ./gradlew testDebugUnitTest
$ ./gradlew jacocoDebugUnitTest
app
モジュールの場合は、app/build/jacoco/
にカバレッジレポートが出力されます。
カバレッジレポートのマージ
モジュールごとに出力されたカバレッジレポートをマージする方法がわからなくて困っていたのですが、@t179aさんが教えてくれました。ありがとうございました。
kotlinx-koverを使うと実現できました。
まずはプロジェクトのbuild.gradleにkoverを追加して、有効化します。
plugins {
id("org.jetbrains.kotlinx.kover") version "0.6.1" // 追加
}
koverMerged {
enable() // 追加
}
次に、各モジュールのbuild.gradleにkoverを追加します。
plugins {
id("org.jetbrains.kotlinx.kover") // 追加
}
以下のコマンドで build/reports/kover/merged/
にマージされたテストレポートが出力されました。
% ./gradlew koverMergedReport
References
書いている人 😎

茨城県つくば市在住のモバイルアプリケーションアーキテクト(Androidが得意です)。モバイルアプリのアーキテクチャ、自動テスト、CI/CDに興味があります。いわゆる「レガシーコード」のリファクタリング・リアーキテクチャが好きです。
👉 もっと詳しく
著書 ✍
Android 依存性注入 ヒッチハイク・ガイド🧳
Androidアプリでの依存性注入(Dependency Injection)に入門するためのガイダンスです。依存性注入の概念やメリットを理解し、Dagger Hiltを用いてAndroidアプリに適用する方法を解説しています。
ソフトウェアデザイン 2023年6月号📚
特集「クリーンアーキテクチャとは何か?」の第5章「モバイルアプリ開発における実践」を執筆しました。
Android クリーンアーキテクチャ ヒッチハイク・ガイド🧳
Androidアプリでのクリーンアーキテクチャに入門するためのガイダンスです。クリーンアーキテクチャの概念を理解し、Androidアプリに適用する方法を解説しています。
Android ユニットテスト ヒッチハイク・ガイド🧳
Androidアプリのユニットテストに入門するためのガイダンスです。初学者が混乱せずにAndroidアプリのユニットテストを書き始めることができる、ということを目的としています。
Android MVVMアーキテクチャ入門🛠
Androidアプリ開発の初学者に向けた、MVVM(Model-View-ViewModel)アーキテクチャの入門書を書きました。初学者の方を確実にネクストレベルに引き上げる技術書です。NextPublishingより出版されています。
関連記事 👀
- GitHub ActionsでSonarCloudにカバレッジをアップロードする
- [Android] Uniflowを用いたMVI的なアーキテクチャを試してみる🦄
- [Android] 単体テスト用の依存関係をHiltで解決する
- 俺のパブリックリポジトリ
- GitHub ActionsでktlintとAndroid Lintを並列実行して、DangerでPRにまとめてコメントする🐝