アンドロイドのグレードルバージョンカタログ

Gradleのバージョンカタログを使用すると、依存関係を簡単かつスケーラブルに追加および管理できます。アプリは成長し、複数の開発チームでプロジェクトを管理することでコンパイル時間が増加します。

この問題に対処する1つの潜在的な解決策は、プロジェクトを複数のモジュールに分割することです。これらのモジュールを並列にコンパイルし、変更された部分のみを再コンパイルすることで、全体的なコンパイル時間が短縮されます。しかし、問題が発生します:どのようにして共通ライブラリ依存関係とそれらのバージョンを効果的に共有し、コンパイルエラーを回避し、各モジュールのGradleファイルを手動で調査する必要がないように同期の問題を防ぐことができるのでしょうか?

Gradleのバージョンカタログは、すべての依存関係を1つのファイルに集中させ、モジュールから呼び出すことができる安全な型付けを提供します。

バージョンファイルの作成

まず、Gradleフォルダにファイルを作成する必要があります。慣例により、Android開発ガイドで推奨されているlibs.version.tomlという名前を使用します。

このファイルには3つのセクションがあります:

 

[versions]

[libraries]

[plugins]

  • バージョン。他の2つのブロックで使用される依存関係とプラグインのバージョンを定義します。
  • ライブラリ。依存関係を含みます。
  • プラグイン。プラグインを含みます。

例として、Koin依存性注入ライブラリのバージョンと依存関係を定義しましょう。

 

[versions]
koin = "3.4.0"

[libraries]
koin-core = { group = "io.insert-koin", name = "koin-core", version.ref = "koin" }
koin-android = { group = "io.insert-koin", name = "koin-android", version.ref = "koin" }
koin-androidx-compose = { group = "io.insert-koin", name = "koin-androidx-compose", version.ref = "koin" }
koin-androidx-workmanager = { group = "io.insert-koin", name = "koin-androidx-workmanager", version.ref = "koin" }
koin-test = { group = "io.insert-koin", name = "koin-test", version.ref = "koin" }
koin-test-junit4 = { group = "io.insert-koin", name = "koin-test-junit4", version.ref = "koin" }

そして、任意のモジュールから依存関係を呼び出すためには、以下のようにすればよいです。

 

Dependencies {
    implementation(libs.koin.core)
    implementation(libs.koin.android)
}

プラグインを作成し、すべてのモジュールが常に同期されるようにする

依存関係の移行が完了した段階で問題が浮かび上がります。Koinを必要とするすべてのモジュールが同じ行を繰り返さなければならなくなります。ここで、DRY(Don’t Repeat Yourself)の明確な例が見られ、繰り返しの繰り返しを避けるためにGradleプラグインを作成します。

Gradleプラグインを登録できるbuild.gradle.ktsファイルで作業します。

 

gradlePlugin {
    plugins {
            register("koin") {
                    id = "example.android.koin"
                    implementationClass = "AndroidKoinConventionPlugin"
                }
}
}

次に、プラグインを作成し、GVCを使用してこのプラグインの依存関係を追加します。

 

class AndroidKoinConventionPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
            dependencies {
      "implementation"(libs.findLibrary("koin.core").get())
      "implementation"(libs.findLibrary("koin.android").get())
      "implementation"(libs.findLibrary("koin.androidx.compose").get())
      "implementation"(libs.findLibrary("koin.androidx.workmanager").get())
      "testImplementation"(libs.findLibrary("koin.test").get())
      "testImplementation"(libs.findLibrary("koin.test.junit4").get())
            }
        }
    }
}

残す唯一のことは、モジュール内でKoinプラグインを呼び出すことです。もしいつかバージョンをアップグレードする必要がある場合は、定義ファイルに移動し、Gradleを同期するだけですべてが更新されます。たとえば、そのすべての依存関係を持つデータモジュールファイル

 

plugins {
    id("example.android.library")
    id("example.android.koin")
}

android {
    namespace = "com.example.core.data"
}

dependencies {
    implementation(libs.kotlinx.coroutines.android)
}

これで、依存関係をグループ化するプラグインを作成できます。たとえば:

  • ライブラリ
  • Compose
  • フレーバー
  • 機能
  • DI
  • データベース
  • テスト

検討事項

Gradleのバージョンカタログはまだ完全な開発中であり、Androidが公開している既知のバグや制限について追いかけることが良いでしょう。この記事の例は、Gradleバージョンカタログの利点と、それが私たちの生活をどれほど簡単にできるかを示しています。それを機能的に適用する例を探しているなら、GitHubでAndroid向けに今すぐ見ることができます。

Source:
https://dzone.com/articles/gradle-version-catalogs-on-android