背景
AndroidStudio、Gradle升级后,新建项目发现Project目录下的build.gradle文件内部大变样,后来搜索发现是Gradle 7.2之后新增了VersionCatalogs来方便开发者对项目依赖进行统一管理。
在此之前,我们一般是通过设置自定义的统一配置文件后apply到Project中来实现依赖库的统一管理。
VersionCatalogs的使用
- 在项目中启用VersionCatalog
在Project的setting.gradle
文件的dependencyResolutionManagement{}
中添加如下代码启用VersionCatalogs
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
...
}
versionCatalogs {
libs {
// 启用versionCatalogs
}
}
}
- 数值管理:使用version对module中类似compileSdk等值的统一管理
如果需要对各个Module目录下build.gradle文件中的compileSdk/targetSdk
等值进行统一管理的话,可以在VersionCatalogs
中通过version
来进行相关别名、值的定义,代码如下:
versionCatalogs {
libs {
// 参数一:别名;参数二:值。
version('compileSdk', '32')
version('targetSdk', '32')
}
}
在Module下的build.gradle文件中,通过以下方式使用:
android {
compileSdk libs.versions.compileSdk.get().toInteger()
...
defaultConfig {
targetSdk libs.versions.targetSdk.get().toInteger()
...
}
}
- 引用库管理:使用library进行引用库版本的统一管理维护
versionCatalogs {
libs {
// 参数一:别名;参数二:值。
version('compileSdk', '32')
version('targetSdk', '32')
// 参数一:别名;参数二:引用库信息。
library('ktx', 'androidx.core:core-ktx:1.7.0')
}
}
在Module下的build.gradle文件中,通过以下方式使用:
Implementation(libs.ktx)
- 捆绑库管理:使用bundles对需要同时引用的多个库进行统一管理、引用
versionCatalogs {
libs {
version('minSdk', '21')
// 参数一:别名;参数二:值。
version('compileSdk', '32')
version('targetSdk', '32')
version('versionCode', '1')
version('versionName', '1.0.0')
// 参数一:别名;参数二:引用库信息。
library('ktx', 'androidx.core:core-ktx:1.7.0')
library('appcompat', 'androidx.appcompat:appcompat:1.4.1')
library('material', 'com.google.android.material:material:1.5.0')
library('constraintlayout', 'androidx.constraintlayout:constraintlayout:2.1.3')
library('junit', 'junit:junit:4.13.2')
// 别名用-分割的,使用时用.来进行替换该符号
library('test-junit', 'androidx.test.ext:junit:1.1.3')
library('test-espresso', 'androidx.test.espresso:espresso-core:3.4.0')
bundle('appinit', ['ktx', 'appcompat', 'material', 'constraintlayout'])
}
}
在Module下的build.gradle文件中,通过以下方式使用:
implementation libs.bundles.appinit
注:如别名(alias)需要用
-
来进行分隔,在引用时需要使用.
来替换该符号。
如果多个库引用的版本号一致,可以使用version
来统一定义一个持有该版本号的别名变量,然后统一引用即可。
参考文章
- 如何使用Gradle7.0+的VERSION_CATALOG
- Sharing dependency versions between projects
- Gradle 7.0 依赖统一管理的全新方式,了解一下
- gradle7 代理配置