You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android项目:Gradle约定插件中排除依赖子库的方法咨询

Gradle约定插件中排除依赖子库的可行方案

问题背景

在Android模块化项目中,使用build-logic作为Gradle约定插件,通过版本目录(version catalog)管理依赖。约定插件代码中通过libs.findLibrary引入androidx.hilt.navigation.compose,需要排除其依赖的androidx.navigation:navigation-runtime子库。此前在app模块的Kotlin DSL脚本中尝试直接配置排除未生效。

可行实现方法

方法1:在约定插件的dependencies块中直接配置排除

修改约定插件类中的依赖添加逻辑,在获取到依赖对象后直接附加排除规则:

class MyConventionPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            pluginManager.apply {
                apply("...")
                apply("...")
            }

            dependencies {
                add("implementation", libs.findLibrary("androidx.hilt.navigation.compose").get()) {
                    exclude(group = "androidx.navigation", module = "navigation-runtime")
                }
            }
        }
    }
}

这里利用Gradle的依赖配置lambda,直接对目标依赖设置排除规则,确保规则在依赖添加时就生效。

方法2:在版本目录文件中预配置排除规则

在libs.versions.toml文件中,给目标依赖预先定义排除规则,这样所有引用该依赖的地方都会自动应用排除:

[versions]
hiltNavigationCompose = "2.5.0" # 替换为你的实际版本号

[libraries]
androidx-hilt-navigation-compose = { 
    group = "androidx.hilt", 
    name = "hilt-navigation-compose", 
    version.ref = "hiltNavigationCompose",
    excludes = [
        { group = "androidx.navigation", module = "navigation-runtime" }
    ]
}

之后在约定插件中直接引用该依赖即可,无需额外编写排除逻辑:

dependencies {
    add("implementation", libs.androidx.hilt.navigation.compose)
}

模块脚本排除未生效的原因

  • 约定插件的依赖配置时机早于模块脚本,模块中的排除规则无法覆盖已添加的依赖配置;
  • 若依赖仅在约定插件中声明,模块脚本中重复声明并添加排除的方式,Gradle可能不会合并该排除规则到原依赖项中。

内容的提问来源于stack exchange,提问作者morteza mgh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:15:57