Gradle Convention Plugins の学習
経緯
Android エンジニアだが Gradle については苦手意識がある。そのため、Now in Android App を真似して Gradle を設定する学習を行う。
Convention Plugins
Now in Android App では、こちらに記載されているように、Convention Plugins を使い、マルチモジュールプロジェクトにおける build.gradle.kts の重複コードを防いでいる。
対象 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
testUtil
- 複数の
feature:xxx
モジュールの単体テストで共通で使われるクラスを格納
feature:landmark モジュールの build.gradle.kts がすっきりした
これだけ
feature:xxx
モジュールが増えたら、これをコピペして namespace
のところだけ変更すれば良い。
alias(libs.plugins.ga913android.android.feature)
で必要な設定を取り込んでいる。
こちらの Convention Plugin に実装されている。
apply("ga913android.android.library.compose")
では Compose を使うモジュール、viewCommon
と共通の設定を実装している。
configureAndroidCompose(this)
の部分は後で説明。
viewCommon
モジュールでは AndroidLibraryComposeConventionPlugin を使っている。
Android の compileSdk, minSdk の設定
内容は Now in Android App のそれそのまま
それぞれアプリモジュールおよびライブラリモジュールの基礎的な Convention Plugin で使用している。
Compose の設定
それぞれ Compose を使うアプリモジュールおよびライブラリモジュールの Convention Plugin で使用している。
Convention Plugin を各モジュールの build.gradle.kts から使えるようにする
build-logic プロジェクト convention
モジュールの build.gradle.kts
で id
をつけて Convention Plugin のクラスを登録する。
バージョンカタログの [plugins]
に登録する。