向版本目录(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 命名规范, 以便更好地协助命名.

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

相关推荐
木易 士心8 小时前
MPAndroidChart 用法解析和性能优化 - Kotlin & Java 双版本
android·java·kotlin
消失的旧时光-19438 小时前
Kotlin Flow 与“天然背压”(完整示例)
android·开发语言·kotlin
ClassOps8 小时前
Kotlin invoke 函数调用重载
android·开发语言·kotlin
努力学习的小廉9 小时前
初识MYSQL —— 数据类型
android·数据库·mysql
Lei活在当下13 小时前
【业务场景架构实战】7. 多代智能手表适配:Android APP 表盘编辑页的功能驱动设计
android·设计模式·架构
手机不死我是天子16 小时前
《Android 核心组件深度系列 · 第 2 篇 Service》
android
前行的小黑炭17 小时前
Compose页面切换的几种方式:Navigation、NavigationBar+HorizontalPager,会导致LaunchedEffect执行?
android·kotlin·app
前行的小黑炭17 小时前
Android :Comnpose各种副作用的使用
android·kotlin·app
BD_Marathon1 天前
【MySQL】函数
android·数据库·mysql
西西学代码1 天前
安卓开发---耳机的按键设置的UI实例
android·ui