Verwenden Sie das Gradle-Release-Verzeichnis, um Bibliotheken und Abhängigkeiten in Android-Projekten zu verwalten


In großen Android-Projekten mit mehreren Modulen (oder anderen Gradle-basierten Projekten) wird die Versionsverwaltung langsam zu einer Herausforderung.

Die häufigste Art und Weise, mit diesem Problem umzugehen, ist die Verwendung von buildSrc. Das Problem dabei ist jedoch, dass buildSrc-Änderungen während des gesamten Build-Prozesses zu einer Cache-Ungültigmachung führen und die Build-Zeit verlängern.

Anscheinend wurde der Call-to-Action nun von buildSrc nach includeBuild verschoben

Wenn Sie über andere benutzerdefinierte Build-Logik und Build-Plugins verfügen, ist es sicherlich sinnvoll, auf den Mechanismus includeBuild umzusteigen. Wenn Ihr buildSrc jedoch nur die Versionierung von Abhängigkeiten benötigt, gibt es einen besseren Weg – das Gradle-Versionsverzeichnis

Version und Bibliothek zu Settings.gradle(.kts) hinzufügen

Hinweis: Alle meine Beispiele sind in kts, da die Build-Skripte in Kotlin über bessere DX (Autovervollständigung, Linting usw.) verfügen.

Dies ist zum Beispiel das, was ich zu „settings.gradle.kts“ hinzugefügt habe (anschließend in der Zeile erweitert).

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. Erstellen Sie einen „Bibliothek“-Block
dependencyResolutionManagement {
  versionCatalogs {
    create("libs") {...}
  }
}

2. Versionskonstanten hinzufügen

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

3. Fügen Sie jede Abhängigkeit hinzu
Sie können auf die Versionskonstante versionRef() verweisen

library("android.material", "com.google.android.material", "material").versionRef("android.material")
  1. Wenn mehrere Bibliotheken zusammen verwendet werden, erstellen Sie ein „Bündel“.
bundle("androidx.appcompat", listOf("androidx.core", "androidx.appcompat"))

build.gradle(.kts) verwendet den Versionskatalog in der Datei
Die Methode, diese im build.gradle des Moduls zu verwenden, ist wie folgt

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")
}

Gewöhnliche Bibliotheken werden auf diese Weise verwendet

  implementation(libs.android.material)

Es ist jedoch möglich, das gesamte Paket auf diese Weise hinzuzufügen

  implementation(libs.android.material)

Was funktioniert nicht?
Es gibt einige Dinge zu beachten

Gradle 7.4+

Wenn Sie Gradle 7.3 oder niedriger verwenden, ist das Release-Verzeichnis eine instabile/experimentelle API und Sie müssen es als solche kennzeichnen. Ab 7.4 sind sie standardmäßig aktiviert

Android Studio-Unterstützung für die Versionsverwaltung

Abhängigkeiten im Versionsverzeichnis werden nicht in den Projektstrukturoptionen von Android Studio angezeigt und Studio erinnert Sie nicht daran, veraltete Abhängigkeiten zu aktualisieren.

Wie Sie unten sehen können, gibt es eine Warnung zum Versionsverzeichnis und die Abhängigkeiten des Versionsverzeichnisses werden nicht angezeigt

Autocomplete funktioniert nur in Kotlin

Wenn Sie build.gradle(groovy) anstelle von build.gradle.kts(kotlinscript) verwenden, erfolgt keine automatische Vervollständigung oder Typprüfung für die libs.x.y-Abhängigkeit

Nachfolgend finden Sie eine Funktion zur automatischen Vervollständigung, die nur innerhalb von .kts-Dateien funktioniert.

Supongo que te gusta

Origin blog.csdn.net/Misdirection_XG/article/details/126661210#comments_25797981
Recomendado
Clasificación