Android Gradle 统一依赖管理方案
在组件化开发 Android 应用时,多个模块可能由不同同事负责,并且依赖引入也可能不是由同一个人来控制,这样会导致引用到的依赖版本不一致,统一升级不方便等问题,所以对版本的统一管理很重要
Android 最原始的依赖管理方式就是直接引入,如果要统一管理,有三种方式:
- 传统 apply from 的方式
- buildSrc 方式
- includeBuild 方式(也有叫 composing builds 方式的)
经过一些考虑,个人认为 apply from 的方式无法跟踪代码、无法自动补全、需要手动搜索相关的依赖,且可读性很差;而 includeBuild 的方式有点太复杂了,于是选择使用 buildSrc 的方式,这里做下记录
buildSrc 方式统一管理依赖流程
- 在项目根目录下新建一个名为 buildSrc 的文件夹(名字必须是 buildSrc,因为运行 Gradle 时会检查项目中是否存在一个名为 buildSrc 的目录)
- 在 buildSrc 文件夹里创建名为 build.gradle.kts 的文件,添加以下内容
1
2
3
4
5
6plugins {
`kotlin-dsl`
}
repositories{
mavenCentral()
} - 创建 buildSrc/src/main/kotlin/ 目录,然后在其下新建 Dependencies.kt 文件,添加以下内容
1
2
3
4
5
6
7
8
9
10
11object Versions {
private const val compileAndTargetSdk = 34
const val compileSdk = compileAndTargetSdk
const val targetSdk = compileAndTargetSdk
const val minSdk = 24
const val buildToolsVersion = "30.0.3"
}
object Strings {
const val applicationId ="com.hoshi.armor"
} - 同步一下,项目里就会多出一个名为 buildSrc 的 module,同时buildSrc 目录下多出了一些不需要的东西,可以在 gitignore 中加一下来忽略掉
- 然后就可以在 build.gradle.kts 中使用了
1
2
3
4
5
6
7
8
9
10compileSdk = Versions.compileSdk
buildToolsVersion = Versions.buildToolsVersion
defaultConfig {
applicationId = Strings.applicationId
targetSdk = Versions.targetSdk
minSdk = Versions.minSdk
versionCode = 1
versionName = "1.0"
} - 有一点要注意的,如果发现无法引用到 Dependencies 内定义的常量,可能是同步的顺序有问题,我在执行上面第 2 步后立刻同步,就无法正确引用了,重新按顺序走一遍流程,最后走到第 4 步才同步,就可以正常使用
参考文章
新一代版本依赖管理 Vesion Catalog
这个是预览版的内容,还未稳定发布,但是看起来将来会成为比较主流的一种用法,后续 AS 的稳定版本支持这种方式后,可以尝试改成这种,然后再补充一下日志,参考文章
Android Gradle 统一依赖管理方案
https://enderhoshi.github.io/2024/03/05/Android Gradle 统一依赖管理方案/