版本目录(Version catalog)可在一个中心位置添加和维护依赖项和插件.
在多模块项目中, 在每个模块的build.gradle
中单独添加依赖项(包括版本)并不理想, 也不是推荐的方法.如果要更改依赖项的版本, 就必须在添加依赖项的每个模块的build.gradle
文件中进行更改.
有许多其他方法可以同时处理依赖关系, 但版本目录是其中一种值得推荐的方法.它使依赖关系管理变得简单, 可扩展和可维护.
在这篇文件中, 我们将了解如何在 Android 多模块项目中引入版本目录.
让我们开始吧!
版本目录文件
在根级gradle
文件夹中创建一个版本目录文件, 并将其命名为libs.versions.toml
.
在libs.versions.toml
文件中添加以下部分.
csharp
[versions]
[libraries]
[plugins]
[versions]
--- 为依赖项和插件定义版本字符串, 它们用于[libraries]
和[plugins]
部分.[libraries]
--- 定义项目中使用的所有依赖项.[plugins]
--- 定义插件
迁移依赖
要通过Version Catalog
使用依赖项, 我们需要在libs.version.toml
文件的[versions]
和[libraries]
部分添加依赖.
我们将以hilt
依赖关系为例进行迁移, 同样的方法也将应用于所有其他依赖关系.
在将Hilt
依赖关系迁移到版本目录之前, 请注意以下几点:
scss
implementation("com.google.dagger:hilt-android:2.44")
kapt("com.google.dagger:hilt-android-compiler:2.44")
将Hilt
依赖迁移到版本目录后.每个依赖关系都将被拆分为group
和name
, 如下所示.
ini
[versions]
daggerHilt = "2.44"
[libraries]
dagger-hilt = { group = "com.google.dagger", name = "hilt-android", version.ref = "daggerHHilt" }
dagger-hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "daggerHilt" }
在每个模块的build.gradle
文件中需要的地方添加这些依赖.
scss
dependencies {
implementation(libs.dagger.hilt)
kapt(libs.dagger.hilt.compiler)
}
请注意命名. 例如, 在libs.version.toml
文件中定义的名称为dagger-hilt
的依赖项被用作libs.dagger.hilt
, 同样, 在build.gradle
文件中定义的dagger-hilt-compiler
被添加为libs.dagger.hilt.compiler
. 因此, 为了更好地帮助命名, 应使用kebab案例命名约定.
迁移BOM依赖项
我们需要在版本目录中以略微不同的方式定义 BOM 依赖关系.
在 BOM 中, 只有 BOM 依赖项定义了版本, 其他依赖项都不带版本, 而是根据 BOM 版本为每个依赖项自动定义版本.
让我们以Compose BOM 为例.
在将 Compose BOM 依赖关系移入版本目录之前, 请先将其移入版本目录.
scss
// jetpack compose bom
implementation(platform("androidx.compose:compose-bom:2023.05.01"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
将Compose BOM 依赖关系移入版本目录后.
ini
[versions]
composeBom = "2023.05.01"
[libraries]
compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
compose-ui = { module = "androidx.compose.ui:ui" }
compose-ui-graphics = { module = "androidx.compose.ui:ui-graphics" }
compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
compose-material3 = { module = "androidx.compose.material3:material3" }
Compose BOM 依赖关系的定义方法与普通依赖关系类似. 但每个不需要版本控制的 Compose 依赖项都必须定义为module
.
在模块build.gradle
文件中使用这些依赖关系.
scss
// jetpack compose bom
implementation(platform(libs.compose.bom)
implementation(libs.compose.ui)
implementation(libs.compose.ui.graphics)
implementation(libs.compose.ui.tooling.preview)
implementation(libs.compose.maerial3)
迁移插件
迁移插件的过程也类似, 我们将在libs.versions.toml
文件的[versions]
和[plugins]
部分添加条目, 并在plugins{}
块中使用它们的目录名.
在移至版本目录之前使用插件.
bash
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id "com.android.application" version "8.1.3" apply false
id "com.android.library" version "8.1.3" apply false
id "org.jetbrains.kotlin.android" version "1.8.10" apply false
}
// app level configurations
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
// module level configurations
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
id("kotlin-kapt")
}
将这些插件移入版本目录, 如下所述.
ini
[versions]
kotlin = "1.8.10"
androidGradlePlugin = "8.1.3"
[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" }
如上所述, 在[versions]
部分添加版本, 在[plugins]
部分添加插件, 并引用在[versions]
部分添加的版本.
使用版本目录中的插件:
scss
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
}
// app level plugins
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}
// module level plugins
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
id("kotlin-kapt")
}
对版本目录中正在使用的插件使用alias
, 对版本目录中尚未定义的其他插件使用id
.
每当从版本目录中添加依赖关系和插件时, 同步并运行项目.
如前所述, plugins
和dependencies
的命名应使用 kebab 命名规范, 以便更好地协助命名.
就到这里吧, 希望对你有所帮助.