enableAggregatingTask与productFlavors冲突导致依赖任务报错如何解决
根因说明
该报错由构建脚本中依赖配置的修改时机不符合Gradle规则导致,和flavor命名的关联是因为Gradle按字典序加载flavor配置:首字母大于g的flavor对应的配置加载时机晚,此时beforeResolve钩子已经触发,配置进入解析阶段后就不能再修改依赖,才会触发报错,不属于Gradle原生bug。
修复方案
- 替换依赖配置逻辑:将构建脚本中所有通过
beforeResolve钩子修改依赖的代码,替换为官方推荐的defaultDependencies声明默认依赖
错误写法示例(Groovy):
修正后写法:configurations.all { beforeResolve { dependencies.add("implementation", "com.example:lib:1.0.0") } }
Kotlin脚本修正写法:configurations.all { defaultDependencies { dependencies -> dependencies.add("implementation", "com.example:lib:1.0.0") } }configurations.all { defaultDependencies { add("implementation", "com.example:lib:1.0.0") } } - 若必须保留
beforeResolve逻辑,添加配置状态校验,仅当配置未进入解析阶段时执行修改:configurations.all { config -> beforeResolve { if (config.state == Configuration.State.UNRESOLVED) { // 原有依赖修改逻辑 } } } - 多flavor场景可在
gradle.properties中添加配置关闭flavor懒加载,避免加载时序差异导致的问题:android.experimental.lazyFlavorConfiguration=false
修改完成后重新执行./gradlew :app:dependencies --write-locks即可正常生成lock文件,不受flavor命名影响。
内容的提问来源于stack exchange,提问作者Victor Choy
相关产品推荐
相关产品推荐

