使用Google推荐的VersionCatalog管理统一版本

VersionCatalog是Android在Gradle 7.0推出的一种全新管理统一版本的方式,它较以前的Groovy、buildSrc和includeBuild方式还是有所区别,它可以更好的去帮助开发者管理项目的依赖版本。在最新的Android Studio Giraffe | 2022.3.1中新建项目时,会出现下图选项,可以让开发者选择Version Catalog方式,不过后面还是标注了Experimental(实验性)。

创建VersionCatalog方式的项目

下面我们新建一个项目来感受下Version Catalog方式。

项目新建好之后,可以在gradle目录下面看到lib.versions.toml文件,此文件就是定义管理所有的统一版本和依赖对象。

文件内部只要有四种分类:

  • [versions]:用于声明项目中依赖项引用的版本号
  • [libraries]:用于声明依赖项的具体信息,包括依赖项的组织、名称和版本,此版本可直接引用versions中的值
  • [plugins]:用于声明插件的具体信息,包括插件的id和版本,此版本也可直接引用versions中的值
  • [bundles]:这个比较有趣,它可以声明一组依赖,它可以将多个依赖项组合在一起,方便后续的添加
基本用法

下面我们来看下具体的玩法,以添加Retrofit为例感觉下VersionCatalog的写法,先在toml文件中将版本和依赖项具体信息定义好

ini 复制代码
[versions]
retrofit-version = "2.9.0"

[libraries]
retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit-version" }

然后就可以在模块的build.gradle.kts文件中添加对应的依赖引用

scss 复制代码
dependencies {
	implementation(libs.retrofit)
}

完成上面的操作之后,sync下项目就可以将retrofit添加到项目当中了。

versions部分不需要多加解释,它就是定义好retrofit的版本号而已,在libraries中需要注意下group和name的信息,这两个对应的时依赖项的组织和名称,也就是我们最原始方式com.squareup.retrofit2:retrofit:2.9.0中前面的信息,group对应的是第一个冒号前的信息,name对应的是两个冒号之间的信息,然后version.ref直接将versions中定义好的版本号赋值上去即可。对应关系如下图所示:

bundles用法

学习了单个依赖的添加方式之后,我们再来看看bundles的用法,结合retrofit的依赖再添加下converter-gson依赖,毕竟这两个基本是绑定在一起使用的(使用Gson处理接口返回数据的前提下🤣)

ini 复制代码
[versions]
retrofit-version = "2.9.0"

[libraries]
retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit-version" }
retrofit-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit-version" }

[bundles]
retrofit-bundles = ["retrofit", "retrofit-gson"]

因为converter-gson和retrofit版本号是一致的,所以不用再单独的添加versions信息,只需要在libraries中添加converter-gson具体信息即可。

然后在bundles中将retrofit和retrofit-gson配置到单独的数组中,这样就可以在build.gradle通过libs.bundles.retrofit.bundles对其两个同时引用。

scss 复制代码
dependencies {
	implementation(libs.bundles.retrofit.bundles)
}

这方式在我眼里绝对是个开发者的福利,不仅仅是retrofit需要这样的同组添加依赖,还有room、Compose、lifecycle系列等都可以采用这样的方式进行大批量的依赖添加,这样我们在新建模块添加依赖时就不至于丢三落四了🍗。

plugins使用

VersionCatalog不仅仅可以管理三方库的依赖项,还可以对plugins进行统一管理,在toml文件中有plugins部门专门对插件的版本依赖进行管理,下面我们体会下

ini 复制代码
[versions]
org-jetbrains-kotlin-android = "1.8.10"

[plugins]
org-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "org-jetbrains-kotlin-android" }

上面代码中我们先将kotlin的版本1.8.10在versions中定义好,然后在plugins中将kotlin的插件具体信息定义完善,最后就可以直接在根目录的build.gradle.kts中对其引用

bash 复制代码
plugins {
    alias(libs.plugins.org.jetbrains.kotlin.android) apply false
}

在build.gradle.kts文件的plugins中采用别名alias形式执行toml文件中的org-jetbrains-kotlin-android即可,注意需要将-转成.的形式,这和我们之前的id 'org.jetbrains.kotlin.android' version '1.8.10' apply false方式还是有点区别的,从写法上面来看toml的方式变得更为简洁了,而且我们也可以将各模块下build.gradle.kts中plugins信息执行toml定义好的插件。

csharp 复制代码
// toml形式
plugins {
    alias(libs.plugins.org.jetbrains.kotlin.android)
}

// 未使用toml形式
plugins {
    id 'org.jetbrains.kotlin.android'
}

这样就可以在toml文件中定义一次,后续通用即可,非常棒的设计👍。

VersionCatalog额外的优势和劣势

在Android Studio Giraffe | 2022.3.1版本中,我们可以直接在toml文件中观察到依赖项有没有新版本的提示,具体效果看下方图片:

比如core-ktx库我们定义的是1.9.0版本,但是最新版本已经为1.10.1,在对应的版本号中会有高亮提示,提醒开发者此库有新的版本,可以进行option+enter一键修改。

但是截止Android Studio Giraffe | 2022.3.1版本,还不支持从toml一键跳转到对应的引用处,无法查看在哪些地方对其引用了,后续的Android StudioHedgehog或许会将此功能加上,到时候VersionCatalog会更加智能。

到这为止VersionCatalog基本的使用知识已经介绍完了,大家如果感兴趣可以去新建项目体验下,整体的使用过程还是比较舒服的,而且官方的示例 Now In Android项目也采用这种方式管理项目的统一版本,后续Google应该会都采用此方式。感谢大家的阅读🙂!

关于我

我是Taonce,如果觉得本文对你有所帮助,帮忙关注、赞或者收藏三连一下,谢谢🙂~

相关推荐
AnalogElectronic2 小时前
问题记录,在使用android studio 构建项目时遇到的问题
android·ide·android studio
我爱松子鱼2 小时前
mysql之InnoDB Buffer Pool 深度解析与性能优化
android·mysql·性能优化
江上清风山间明月5 小时前
Flutter开发的应用页面非常多时如何高效管理路由
android·flutter·路由·页面管理·routes·ongenerateroute
子非衣9 小时前
MySQL修改JSON格式数据示例
android·mysql·json
openinstall全渠道统计12 小时前
免填邀请码工具:赋能六大核心场景,重构App增长新模型
android·ios·harmonyos
双鱼大猫12 小时前
一句话说透Android里面的ServiceManager的注册服务
android
双鱼大猫13 小时前
一句话说透Android里面的查找服务
android
双鱼大猫13 小时前
一句话说透Android里面的SystemServer进程的作用
android
双鱼大猫13 小时前
一句话说透Android里面的View的绘制流程和实现原理
android
双鱼大猫13 小时前
一句话说透Android里面的Window的内部机制
android