Closed6

Gradle Convention Plugins の学習

高田 晴彦高田 晴彦

経緯

Android エンジニアだが Gradle については苦手意識がある。そのため、Now in Android App を真似して Gradle を設定する学習を行う。

Convention Plugins

Now in Android App では、こちらに記載されているように、Convention Plugins を使い、マルチモジュールプロジェクトにおける build.gradle.kts の重複コードを防いでいる。

https://github.com/android/nowinandroid/tree/main/build-logic

高田 晴彦高田 晴彦

対象 Android プロジェクト

https://github.com/tfandkusu/ga913-android

Apple 公式サンプル Handling user input と同じ仕様の自作 Android アプリ

モジュール構成

model

  • ドメインモデルは model モジュールに格納
  • model モジュールはすべてのモジュールから参照される

feature:landmark

  • ViewModel と Compose は feature:xxx モジュールに格納
  • このアプリは小規模なサンプルなので1つの feature:xxx モジュールしか無いが、機能が増えるごとに feature:xxx モジュールが増える想定

viewCommon

  • 複数の feature:xxx モジュールから共通で使われる UI 層のクラスを格納

data

  • data 層を格納する
  • 小規模なサンプルなので Domain 層は省略されている

testUtil

  • 複数の feature:xxx モジュールの単体テストで共通で使われるクラスを格納
高田 晴彦高田 晴彦

feature:landmark モジュールの build.gradle.kts がすっきりした

これだけ

https://github.com/tfandkusu/ga913-android/blob/main/feature/landmark/build.gradle.kts

feature:xxx モジュールが増えたら、これをコピペして namespace のところだけ変更すれば良い。

alias(libs.plugins.ga913android.android.feature) で必要な設定を取り込んでいる。
こちらの Convention Plugin に実装されている。

https://github.com/tfandkusu/ga913-android/blob/main/build-logic/convention/src/main/kotlin/com/tfandkusu/ga913android/AndroidFeatureConventionPlugin.kt

apply("ga913android.android.library.compose") では Compose を使うモジュール、viewCommon と共通の設定を実装している。
configureAndroidCompose(this) の部分は後で説明。

https://github.com/tfandkusu/ga913-android/blob/main/build-logic/convention/src/main/kotlin/com/tfandkusu/ga913android/AndroidLibraryComposeConventionPlugin.kt

viewCommon モジュールでは AndroidLibraryComposeConventionPlugin を使っている。

https://github.com/tfandkusu/ga913-android/blob/main/viewCommon/build.gradle.kts

高田 晴彦高田 晴彦

Convention Plugin を各モジュールの build.gradle.kts から使えるようにする

build-logic プロジェクト convention モジュールの build.gradle.ktsid をつけて Convention Plugin のクラスを登録する。

https://github.com/tfandkusu/ga913-android/blob/main/build-logic/convention/build.gradle.kts

バージョンカタログの [plugins] に登録する。

https://github.com/tfandkusu/ga913-android/blob/main/gradle/libs.versions.toml

このスクラップは2024/11/16にクローズされました