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

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

相关推荐
众拾达人44 分钟前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
吃着火锅x唱着歌2 小时前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
_Shirley3 小时前
鸿蒙设置app更新跳转华为市场
android·华为·kotlin·harmonyos·鸿蒙
hedalei5 小时前
RK3576 Android14编译OTA包提示java.lang.UnsupportedClassVersionError问题
android·android14·rk3576
锋风Fengfeng5 小时前
安卓多渠道apk配置不同签名
android
枫_feng5 小时前
AOSP开发环境配置
android·安卓
叶羽西6 小时前
Android Studio打开一个外部的Android app程序
android·ide·android studio
qq_171538857 小时前
利用Spring Cloud Gateway Predicate优化微服务路由策略
android·javascript·微服务
Vincent(朱志强)8 小时前
设计模式详解(十二):单例模式——Singleton
android·单例模式·设计模式
mmsx9 小时前
android 登录界面编写
android·登录界面