向版本目录(Version Catalog)迁移

版本目录(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依赖迁移到版本目录后.每个依赖关系都将被拆分为groupname, 如下所示.

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.

每当从版本目录中添加依赖关系和插件时, 同步并运行项目.

如前所述, pluginsdependencies的命名应使用 kebab 命名规范, 以便更好地协助命名.

就到这里吧, 希望对你有所帮助.

相关推荐
大白要努力!23 分钟前
Android opencv使用Core.hconcat 进行图像拼接
android·opencv
天空中的野鸟1 小时前
Android音频采集
android·音视频
小白也想学C2 小时前
Android 功耗分析(底层篇)
android·功耗
曙曙学编程3 小时前
初级数据结构——树
android·java·数据结构
闲暇部落5 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
诸神黄昏EX7 小时前
Android 分区相关介绍
android
大白要努力!8 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
Estar.Lee8 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
Winston Wood8 小时前
Perfetto学习大全
android·性能优化·perfetto
Dnelic-11 小时前
【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录
android·junit·单元测试·android studio·自学笔记