Gradle版本目录允許我們以簡單且可擴展的方式添加和維護依賴項。隨著應用程式的成長,管理多個開發團隊的項目會增加編譯時間。
解決此問題的一個潛在方案是將項目分割成多個模塊。並行編譯這些模塊,僅重新編譯已修改的部分,可以減少整體編譯時間。然而,一個困境出現了:如何在避免編譯錯誤和手動審查每個模塊的Gradle文件以防止同步問題的同時,有效地共享通用庫依賴及其相應版本?
Gradle版本目錄幫助我們將所有依賴項集中在一個具有安全類型的單一文件中,您可以從您的模塊中調用它。
創建版本文件
首先,我們必須在Gradle文件夾中創建我們的文件。按照慣例,我們使用Android開發指南中推薦的名稱libs.version.toml
。
此文件將有三個部分:
[versions]
[libraries]
[plugins]
- 版本。定義在其他兩個塊中使用的依賴項和插件的版本
- 庫。包含依賴項。
- 插件。包含插件。
讓我們以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插件,以避免一再重複添加這些依賴。
在我們的build.gradle.kts
文件中,我們將能夠註冊我們的Gradle插件。
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)
}
通過這一切,我們可以創建將依賴分組的插件,例如:
- 庫
- 組合
- 風味
- 功能
- 依賴注入
- 數據庫
- 測試
注意事項
Gradle 版本目錄目前仍在全面開發中,因此跟進 Android 所發布的已知錯誤與限制實屬必要。本文中的範例展示了 Gradle 版本目錄的優勢,以及它們如何讓我們的工作更加輕鬆。若想尋找其實際應用,可立即前往GitHub查看適用於Android的案例。
Source:
https://dzone.com/articles/gradle-version-catalogs-on-android