一个简单的 Android 版本目录实现指南
使用 TOML 格式
在本文中,我们将探讨版本目录以及如何实现它。
版本目录
Gradle 版本目录使您能够以可扩展的方式添加和维护依赖项和插件。因此,不必在各个构建文件中硬编码依赖项名称和版本,而是在目录中定义它们,并在所有模块中使用。
实现
要实现版本目录,我们可以在 settings.gradle
文件的 dependencyResolutionManagement
块中定义目录(查看此链接以了解更多详细信息),但我们将使用 TOML
格式来实现它…
https://docs.gradle.org/current/userguide/platforms.html
1- 创建一个版本目录文件
在根项目的 gradle 文件夹中,创建一个名为 libs.versions.toml
的文件。Gradle 默认在 libs.versions.toml
文件中查找目录,因此建议使用这个默认名称。
2- 定义您的版本、库和插件…
在 libs.versions.toml
中,我们可以定义我们的表…"
[versions]
kotlin = "1.8.10"
compose = '1.4.0'
material3 = '1.1.0-rc01'
...
[libraries]
compose-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" }
compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "material3" }
...
[plugins]
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
...
基本上,[versions]
和 [libraries]
是一组键/值对(如 kotlin = "1.8.10"
)的集合,称为 Tables…
https://toml.io/en/v1.0.0#table
这些表将从所有构建文件的libs.table.key
处访问,因此我们稍后将在构建文件中使用它们。
请注意,我们使用了版本引用(version.ref = "xxx"
)而不是硬编码版本。这样可以使我们的版本可重复使用 😃
注意:您可以使用分隔符,例如 -、_、.
,Gradle 将它们归一化为 .
,并允许您创建子部分。因此,compose-ui
将成为 compose.ui
。
3- 定义 bundles(可选)
优化的做法是声明依赖束,这是常用在一起的“依赖项组”。例如…
[bundles]
compose = [
"compose-ui",
"compose-material3"
]
4- 最后,在您的模块中使用它们 🤩
同步项目,嘿!您现在拥有了一切,可以轻松地使用类型安全的自动完成来定义依赖项… ,
plugins {
alias libs.plugins.kotlin.android
...
}
dependencies {
// compose
implementation libs.compose.ui
implementation libs.compose.material3
// or you can use bundles
implementation libs.bundles.compose
}
实际上就是这样 😃 现在您只需同步项目,解决 Gradle 抛出的数千个错误,然后就可以开始了
以下是一些有用的注意事项…
- 1- 您可以不使用库的完整 ID…,
compose-ui = { module = "androidx.compose.ui:ui", ...}
而是分开定义库的组和名称…,
androidx-ktx = { group = "androidx.core", name = "core-ktx", ... }
-
2- 通常,版本名称使用驼峰命名(例如,
hiltCompose
),而库、捆绑包和插件使用短横线命名(例如,androidx-ktx
)。 -
3- 在我们的 TOML 文件中声明的版本也可以通过类型安全的访问器访问,使它们可以用于更多用例,而不仅仅是依赖版本。例如,如果您正在使用 compose… "
composeOptions {
kotlinCompilerExtensionVersion libs.versions.compose.get()
}
版本目录(Version catalog)的优势
- 1- 使用类型安全的自动完成轻松添加依赖项。
- 2- 所有依赖项都在一个地方进行管理,并对所有模块可见。
- 3- 集中式版本控制。
- 4- 捆绑包功能令人惊叹
缺点
- 1- 没有依赖项更新建议。(但您可以使用此插件来帮助您保持库的最新状态)
- 2- 迁移项目可能会比较繁琐(使用 Copilot 或向懂行的人寻求帮助吧)。
参考链接
https://github.com/infoilyasipek/satellite/commit/f516054ae393eca2cf1c8bdd58735aa1819aabbc
https://docs.gradle.org/current/userguide/platforms.html
https://developer.android.com/build/migrate-to-catalogs#groovy
https://proandroiddev.com/better-dependencies-management-using-buildsrc-kotlin-dsl-eda31cdb81bf