okuzawatsの日記

Android / Kotlin / GitHub Actions Enthusiast 🤖

[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

書いている人 😎

profile

茨城県つくば市在住のモバイルアプリケーションアーキテクト(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より出版されています。

販売サイトへ🏃

関連記事 👀

お問い合わせ✉️

Androidアプリ開発、特にレガシープロジェクトに関するご相談はこちらまで📨

お名前

メールアドレス

お問い合わせ内容