Android 依赖统一配置管理(Version Catalogs)
最近升级了Android Studio版本到Koala Feature Drop | 2024.1.2,新建项目后发现项目配置又有变化,默认开始使用了一个名叫 Gradle 版本目录
的东西,当然也可以称之为依赖统一配置管理
,一开始还有点陌生,但是经过一番了解之后,发现其实看着变化挺大,但总得来说还是比较容易上手,当然了之前的配置方式还是可以继续使用,但是官方既然推荐,那么还是很有必要学习下的,毕竟码农也还是要与时俱进的。
依赖统一配置管理
借助 Gradle 版本目录,您能够以可扩容的方式添加和维护依赖项和插件。使用 Gradle 版本目录,您可以在拥有多个模块时更轻松地管理依赖项和插件。您不必对各个 build 文件中的依赖项名称和版本进行硬编码,也不必在每次需要升级依赖项时都更新每个条目,而是可以创建一个包含依赖项的中央版本目录,各种模块可在 Android Studio 协助下以类型安全的方式引用该目录。
上面这一段是官方的描述,应该都能看明白,Gradle 版本目录
新项目是通过名为libs.versions.toml
的文件进行配置的,因此我们就先从该文件入口一步一步看看是如何配置和使用的。
依赖和插件配置方式
在项目中会多出来一个libs.versions.toml的文件,该文件的存放目录在项目根目录中的gradle文件夹中,其结构如下:
[versions]
...
[libraries]
...
[plugins]
...
不难看出内容结构分为三个部分,其作用如下:
[versions]: 定义了项目中使用的依赖项或者插件的版本变量。可以在后续代码块(libraries 和 plugins 代码块)中使用这些变量。
[libraries]: 定义了项目中需要使用的依赖项。(适用于远程二进制文件或本地库模块,貌似是废话~)。
[plugins]: 定义了项目中需要使用的插件。
接着让我们来用一个完整的示例来看它具体是如何配置依赖项和插件的:
[versions]
agp = "8.6.0"
appcompat = "1.6.1"
[libraries]
appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
这里在[versions]
中配置了两个版本号变量,一个是名为agp(安卓gradle插件)的版本为8.6.0,另一个是名为appcompat依赖的版本为1.6.1。
在[libraries]
中完整的配置了名为appcompat的依赖项变量,等号右边大括号中的version.ref则是对[versions]
配置中的appcompat版本号的引用,然后group和name则是真实依赖的信息,完整的配置下来的话,依赖为:“androidx.appcompat:appcompat:1.6.1”。
在[plugins]
中完整的配置了名为android-application的插件变量,等号右边大括号中version.ref则引用了[versions]
中配置的agp版本号,id这里就不再描述了~。
此外,关于变量命名方式,官方建议使用kebab case方式进行命名。
Kebab case(或称为snake case的全小写版本)是一种用于编写变量名、文件名和其他标识符的命名约定。在kebab case中,所有的字母都是小写的,并且每个单词之间用连字符(-)分隔。
说到这里,配置这块应该都有一个大致的了解了吧,如果还不明白的话,可以这么认为,libs.versions.toml
是一个类,[versions]
是一个键为String,值为String的公有集合;[libraries]
是一个键为String,值为librarie对象(三个变量group、name、version)的公有集合;[plugins]
是一个键为String,值为plugin对象(两个变量id、version)的公有集合,就跟我们用java或者kotlin写代码是一样的,这个类主要是用来通过这些变量和对象配置我们项目中需要引入的依赖或者插件信息,后续需要使用的时候通过这里配置的信息名称引用即可,可能我这个描述不不太恰当,但大致意思应该就是这样。
项目中引用
插件引用
插件引用,通过libs.plugins进行配置的插件变量的引用,并将变量名中的下划线和短划线转换为圆点。还是以上面的例子继续,插件的引入方式:
根目录下的build脚本:
plugins {
alias(libs.plugins.android.application) apply false
}
模块下的build脚本:
plugins {
alias(libs.plugins.android.application)
}
依赖引用
在需要添加依赖的模块中的 build 脚本中添加对依赖项别名的引用。从 build 脚本引用依赖变量时,需要以libs.开头进行访问,不需要包含 libraries 限定符,例如:
dependencies {
implementation(libs.appcompat)
}
版本号引用
版本号引用需要以libs.versions开头进行引用, versions版本号引用,实际应该极少有使用的场景,其实跟上面两个类似,这里就不再举例了。
总结
以上就是本篇文章的全部内容。是不是觉得还是比较简单的,通过以上内容,想必有些同学也能看出来,使用依赖统一配置确实好处多多,特别是针对多module的项目,依赖集中管理、减少重复、提高可读性。更重要的是引用简单,可以显著提高依赖管理的可维护性。