如何创建Android统一依赖管理模块并向其他模块输出部分依赖
依赖管理模块实现方案
这个需求是多模块Android项目的通用最佳实践,目前有两种成熟的实现方式:
方案1:Gradle版本目录(官方推荐,适合分类分组管理依赖)
该方案可以直接把不同类型的依赖打包成依赖组,其他模块按需引入即可:
- 首先创建独立的依赖管理模块(命名可自定义,比如
dependency-manager),该模块不需要任何业务代码,仅保留配置文件即可。 - 在模块根目录下新建
gradle/libs.versions.toml文件,分类声明app、wearOSApp、core三类依赖,示例如下:
[versions] core-ktx = "1.12.0" wear-compose = "1.3.0" appcompat = "1.6.1" [libraries] # core类依赖 core-ktx = { module = "androidx.core:core-ktx", version.ref = "core-ktx" } # app类依赖 app-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" } # wearOS类依赖 wear-compose-material = { module = "androidx.wear.compose:compose-material", version.ref = "wear-compose" } [bundles] # 同类型依赖打包,方便批量引入 core = ["core-ktx"] app = ["app-appcompat"] wear = ["wear-compose-material"]
- 在项目根目录的
settings.gradle(.kts)中关联该版本目录:
// settings.gradle.kts 示例 dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() } // 关联自定义模块中的版本目录 versionCatalogs { create("libs") { from(files("./dependency-manager/gradle/libs.versions.toml")) } } }
- 其他模块按需引入对应依赖即可,不需要单独声明版本:
// 比如wearOSApp模块的build.gradle.kts dependencies { // 批量引入wear类所有依赖 implementation(libs.bundles.wear) // 也可以单独引入某一个core类依赖 implementation(libs.core.ktx) }
方案2:Java Platform插件(适合强制全项目统一依赖版本)
如果需要严格限制所有模块的依赖版本,避免出现版本不一致问题,可以使用该方案:
- 给依赖管理模块的
build.gradle(.kts)引入java-platform插件,声明所有需要统一管理的依赖:
// dependency-manager模块的build.gradle.kts示例 plugins { `java-platform` } dependencies { constraints { // core类依赖 api("androidx.core:core-ktx:1.12.0") // app类依赖 api("androidx.appcompat:appcompat:1.6.1") // wearOS类依赖 api("androidx.wear.compose:compose-material:1.3.0") } }
- 其他模块先引入该platform依赖,再按需引入对应包,不需要写版本号:
// app模块的build.gradle.kts示例 dependencies { implementation(platform(project(":dependency-manager"))) // 直接引入需要的依赖,版本会自动从platform模块获取 implementation("androidx.appcompat:appcompat") implementation("androidx.core:core-ktx") }
通用性说明
该实现已经被大量Android多模块项目采用,包括Google官方的架构示例项目、多数中大厂的商用项目,核心优势是统一依赖版本,降低后续版本升级的维护成本。
内容的提问来源于stack exchange,提问作者Kacper Królikowski
相关产品推荐
相关产品推荐

