遷移到version catalogs
一读宙、什么是version catalogs
version catalogs是Gradle 7.0引入的一種新特性,它可以讓您以可擴容的方式添加和維護依賴項和插件纬向。使用version catalogs琐谤,您可以在一個中央的TOML文件中定義依賴項和插件的名稱和版本磕蒲,然后在各個模塊中以類型安全的方式引用它們蓖乘。這樣可以避免在多個build文件中硬編碼依賴項名稱和版本,也可以方便地進行依賴項的升級和管理峦睡。
二翎苫、為什么要遷移到version catalogs
遷移到version catalogs有以下好處:
- 提高build文件的可讀性和一致性,減少重復(fù)和冗余的代碼
- 支持代碼補全和導(dǎo)航榨了,提高開發(fā)效率和準(zhǔn)確性
- 方便地在一個地方管理依賴項和插件的版本煎谍,避免版本沖突和不匹配的問題
- 支持多項目構(gòu)建和復(fù)用,提高構(gòu)建性能和穩(wěn)定性
傳統(tǒng)的方式是在gradle中定義幾個常量龙屉,這種方式雖然可以做到統(tǒng)一定義呐粘,但是不方便我們查找版本號
使用version catalogs可以ctrl+mouse left快速定位到依賴項定義處
三作岖、如何遷移到version catalogs
遷移到version catalogs的過程分為以下幾個步驟:
3.1 創(chuàng)建版本目錄文件
首先五芝,在根項目的gradle文件夾中枢步,創(chuàng)建一個名為libs.versions.toml的文件。Gradle默認會在這個文件中查找目錄矾瑰,因此我們建議使用這個默認名稱结蟋。在這個文件中嵌屎,添加以下部分:
[versions]
[libraries]
[plugins]
這些部分的含義如下:
- 在versions代碼塊中,定義用于保存依賴項和插件版本的變量植榕。您可以在后續(xù)代碼塊(libraries和plugins代碼塊)中使用這些變量尊残。
- 在libraries代碼塊中淤堵,定義依賴項。
- 在plugins代碼塊中慰毅,定義插件扎阶。
3.2 遷移依賴項
在libs.versions.toml文件的versions和libraries部分,為每個依賴項添加一個條目东臀。同步您的項目,然后將build文件中的聲明替換為相應(yīng)的目錄名稱宰掉。
移除依賴項之前的build.gradle.kts文件:
dependencies {
implementation("androidx.core:core-ktx:1.9.0")
}
在版本目錄文件(libs.versions.toml
)中定義依賴項:
[versions]
ktx = "1.9.0"
[libraries]
androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "ktx" }
在為目錄中的依賴項代碼塊命名時建議使用kebab case(例如androidx-ktx)赁濒,以便在build文件中獲得更好的代碼補全幫助。
在需要此依賴項的每個模塊的build.gradle文件中戚绕,按照您在TOML文件中定義的名稱定義依賴項枝冀。
dependencies {
implementation(libs.androidx.ktx)
}
3.3 遷移插件
在libs.versions.toml文件的版本和插件部分果漾,為每個插件添加一個條目绒障。
同步您的項目,然后將build文件中plugins {}代碼塊內(nèi)的聲明替換為相應(yīng)的目錄名稱鸵钝。
移除插件之前的build.gradle文件:
// Top-level `build.gradle.kts` file
plugins {
id("com.android.application") version "7.4.1" apply false
id("com.android.library") version "7.4.1" apply false
id("org.jetbrains.kotlin.android") version "1.5.31" apply false
}
在版本目錄文件(libs.versions.toml
)中定義插件:
[versions]
androidGradlePlugin = "7.4.1"
kotlin = "1.5.31"
[plugins]
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
與依賴項一樣变逃,在為plugins代碼塊目錄條目設(shè)置格式時建議使用kebab case(例如android-application)怠堪,以便在build文件中獲得更好的代碼補全幫助。
在頂級和模塊級build.gradle文件中定義com.android.application插件粟矿。對于來自版本目錄文件的插件陌粹,請使用alias;對于并非來自版本目錄文件的插件(例如慣例插件)绘证,請使用id嚷那。
// Top-level build.gradle
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
}
// module build.gradle
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}
注意:如果您使用的是低于8.1的Gradle版本,則需要在使用版本目錄時為plugins {}代碼塊添加注解(@Suppress("DSL_SCOPE_VIOLATION"))魏宽。