Gradle リリース ディレクトリを使用して Android プロジェクトのライブラリと依存関係を管理する


大規模なマルチモジュール Android (または任意の Gradle ベース) プロジェクトでは、バージョン管理が少し面倒になり始めます。

この問題に対処する最も一般的な方法は buildSrc を使用することですが、これの問題は、buildSrc の変更によりビルド プロセス全体でキャッシュが無効になり、ビルド時間が増加することです。

どうやら行動喚起が buildSrc から includeBuild に移動されたようです

他のカスタム ビルド ロジックやビルド プラグインがある場合は、includeBuild メカニズムに移行することは確かに理にかなっていますが、buildSrc に依存関係のバージョン管理のみが必要な場合は、より良い方法があります。gradle バージョン ディレクトリです。

バージョンとライブラリを settings.gradle(.kts) に追加します

注: kotlin のビルド スクリプトの方が DX (オートコンプリート、リンティングなど) が優れているため、私の例はすべて kts で示されています。

たとえば、これは私が settings.gradle.kts に追加したものです(その後その行で展開されます)

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }

    versionCatalogs {
        create("libs") {
            version("androidx.navigation", "2.4.1")
            version("android.material", "1.7.0-alpha01")
            version("moshi", "1.13.0")
            version("retrofit", "2.9.0")
            version("moshi", "1.13.0")

            library("android.material", "com.google.android.material", "material").versionRef("android.material")
            library("androidx.navigation.fragment", "androidx.navigation", "navigation-fragment-ktx").versionRef("androidx.navigation")
            library("androidx.navigation.ui", "androidx.navigation", "navigation-ui-ktx").versionRef("androidx.navigation")
            library("androidx.core", "androidx.core:core-ktx:1.7.0")
            library("androidx.appcompat", "androidx.appcompat:appcompat:1.4.1")
            library("okhttp", "com.squareup.okhttp3:okhttp:5.0.0-alpha.6")
            library("retrofit", "com.squareup.retrofit2", "retrofit").versionRef("retrofit")
            library("retrofit.converter.moshi", "com.squareup.retrofit2", "converter-moshi").versionRef("retrofit")
            library("moshi", "com.squareup.moshi", "moshi-kotlin").versionRef("moshi")
            library("moshi.compiler", "com.squareup.moshi", "moshi-kotlin-codegen").versionRef("moshi")

            bundle("androidx.appcompat", listOf("androidx.core", "androidx.appcompat"))
            bundle("androidx.navigation", listOf("androidx.navigation.fragment", "androidx.navigation.ui"))
            bundle("retrofit", listOf("retrofit", "retrofit.converter.moshi"))
        }
    }
}
  1. 「ライブラリ」ブロックを作成する
dependencyResolutionManagement {
  versionCatalogs {
    create("libs") {...}
  }
}

2. バージョン定数を追加する

version("android.material", "1.7.0-alpha01")
version("moshi", "1.13.0")
version("retrofit", "2.9.0")

3. 各依存関係を追加します
バージョン定数 versionRef() を参照できます

library("android.material", "com.google.android.material", "material").versionRef("android.material")
  1. 一緒に使用するライブラリのセットがある場合は、「バンドル」を作成します
bundle("androidx.appcompat", listOf("androidx.core", "androidx.appcompat"))

build.gradle(.kts) はファイル内のバージョン カタログを使用します
モジュールの build.gradle でこれらを使用する方法は次のとおりです

dependencies {

    implementation(libs.bundles.androidx.appcompat)
    implementation(libs.android.material)
    implementation("androidx.constraintlayout:constraintlayout:2.1.3")
    implementation(libs.bundles.androidx.navigation)
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.3")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
}

通常のライブラリはこのように使用します

  implementation(libs.android.material)

このようにバンドル全体を追加することもできますが、

  implementation(libs.android.material)

何がうまくいかないのでしょうか?
注意すべき点がいくつかあります

グラドル 7.4+

Gradle 7.3 以前を使用している場合、リリース ディレクトリは不安定/実験的な API であるため、そのようにマークする必要があります。 7.4 以降、デフォルトで有効になっています

Android Studio のバージョン管理のサポート

バージョン ディレクトリ内の依存関係は Android Studio のプロジェクト構造オプションには表示されず、Studio は古い依存関係を更新するように通知しません。

以下に示すように、バージョン ディレクトリに関する警告が表示され、バージョン ディレクトリの依存関係が表示されません。

オートコンプリートは Kotlin でのみ機能します

build.gradle.kts(kotlinscript) の代わりに build.gradle(groovy) を使用する場合、libs.x.y 依存関係のオートコンプリートや型チェックは行われません。

以下は、.kts ファイル内でのみ機能するオートコンプリート機能です。

おすすめ

転載: blog.csdn.net/Misdirection_XG/article/details/126661210#comments_25797981