Android Gradle 统一依赖管理方案

在组件化开发 Android 应用时,多个模块可能由不同同事负责,并且依赖引入也可能不是由同一个人来控制,这样会导致引用到的依赖版本不一致,统一升级不方便等问题,所以对版本的统一管理很重要

Android 最原始的依赖管理方式就是直接引入,如果要统一管理,有三种方式:

  1. 传统 apply from 的方式
  2. buildSrc 方式
  3. includeBuild 方式(也有叫 composing builds 方式的)

经过一些考虑,个人认为 apply from 的方式无法跟踪代码、无法自动补全、需要手动搜索相关的依赖,且可读性很差;而 includeBuild 的方式有点太复杂了,于是选择使用 buildSrc 的方式,这里做下记录

buildSrc 方式统一管理依赖流程

  1. 在项目根目录下新建一个名为 buildSrc 的文件夹(名字必须是 buildSrc,因为运行 Gradle 时会检查项目中是否存在一个名为 buildSrc 的目录)
  2. 在 buildSrc 文件夹里创建名为 build.gradle.kts 的文件,添加以下内容
    1
    2
    3
    4
    5
    6
    plugins {
    `kotlin-dsl`
    }
    repositories{
    mavenCentral()
    }
  3. 创建 buildSrc/src/main/kotlin/ 目录,然后在其下新建 Dependencies.kt 文件,添加以下内容
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    object 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"
    }
  4. 同步一下,项目里就会多出一个名为 buildSrc 的 module,同时buildSrc 目录下多出了一些不需要的东西,可以在 gitignore 中加一下来忽略掉
  5. 然后就可以在 build.gradle.kts 中使用了
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    compileSdk = Versions.compileSdk
    buildToolsVersion = Versions.buildToolsVersion

    defaultConfig {
    applicationId = Strings.applicationId
    targetSdk = Versions.targetSdk
    minSdk = Versions.minSdk
    versionCode = 1
    versionName = "1.0"
    }
  6. 有一点要注意的,如果发现无法引用到 Dependencies 内定义的常量,可能是同步的顺序有问题,我在执行上面第 2 步后立刻同步,就无法正确引用了,重新按顺序走一遍流程,最后走到第 4 步才同步,就可以正常使用

参考文章

新一代版本依赖管理 Vesion Catalog

这个是预览版的内容,还未稳定发布,但是看起来将来会成为比较主流的一种用法,后续 AS 的稳定版本支持这种方式后,可以尝试改成这种,然后再补充一下日志,参考文章


Android Gradle 统一依赖管理方案
https://enderhoshi.github.io/2024/03/05/Android Gradle 统一依赖管理方案/
作者
HoshIlIlI
发布于
2024年3月5日
许可协议