マルチモジュール
マルチモジュールは、どんどん肥大化するプロジェクトにおいて効率性を維持するためにおすすめの方法です。アプリケーションを独立したモジュールに分割することで
- ビルドの高速化
- よいアーキテクチャを強制できる
というメリットがあります。
一方で、モジュールの数が増えると、各モジュールでそれぞれ依存関係を管理するのは大変です。バージョンカタログを導入することによって、マルチモジュールでの依存関係を簡単に管理できるようになります。
バージョンカタログ
バージョンカタログは依存ライブラリとプラグインのバージョンを一元管理するためのGradleの機能です。
バージョンカタログファイルを作成
ルートのgradle
フォルダにlibs.versions.toml
ファイルを作成します。Gradleはデフォルトでこのファイル名を読み込むので、ファイルを作成するだけで大丈夫です。
[versions]
[libraries]
[plugins]
ライブラリの場合
バージョンカタログファイルのversions
とlibraries
に追加します。ライブラリに追加する名前はケバブケース(androidx-core-ktx
など)にします。こうするとbuild.gradle.kts
ではdotに置き換えた形で参照できます(libs.androidx.core.ktx
)
変更前
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
}
変更後
[versions]
core-ktx = "1.12.0"
[libraries]
androidx-core-ktx = { group = "androidx.core", name="core-ktx", version.ref = "core-ktx" }
dependencies {
implementation(libs.androidx.core.ktx)
}
プラグインの場合
変更前
plugins {
id("com.android.application") version "8.2.2" apply false
}
plugins {
id("com.android.application")
}
変更後
[versions]
androidGradlePlugin = "8.2.2"
[plugins]
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
plugins {
alias(libs.plugins.android.application) apply false
}
plugins {
alias(libs.plugins.android.application)
}
バージョンの設定
バージョン名をそのまま使うパターンも同様です。
変更前
android {
composeOptions {
kotlinCompilerExtensionVersion = "1.5.7"
}
}
変更後
[versions]
androidxComposeCompiler = "1.5.7"
android {
composeOptions {
kotlinCompilerExtensionVersion = libs.versions.androidxComposeCompiler.get().toString()
}
}
プロジェクト間の依存
Gradle 7.0で試験的に導入されたTYPESAFE_PROJECT_ACCESSORS機能を使うと、プロジェクトの依存もバージョンカタログと同じように、文字列ではなく型安全に参照できます。
変更前
dependencies {
implementation(project(":core:data"))
}
変更後
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
dependencies {
implementation(projects.core.data)
}
参考