Android+Gradle多模块项目如何配置所有子项目依赖?
问题分析与解决
你遇到的问题核心在于Gradle配置块的作用域和插件加载时机的问题,下面逐个分析错误原因,并给出正确写法:
错误原因拆解
第一种写法无效
你把subprojects块嵌套在了当前模块的dependencies内部,这是完全错误的。subprojects是Gradle的项目级配置块,只能直接放在build文件的根级别(和plugins、android块同级),嵌套在dependencies里的subprojects不会对任何子模块生效,所以依赖根本没被添加到子模块中。第二、三种写法报错
报错信息Configuration with name 'implementation' not found的原因是:implementation是Android插件(比如com.android.library)提供的依赖配置,而你直接在subprojects里写dependencies块时,子模块可能还没加载对应的Android插件,此时implementation配置还未被创建,自然找不到。第三种写法只是多嵌套了一层dependencies,本质和第二种一样,没解决插件加载时机的问题。
正确配置写法
要让当前模块的所有子模块都依赖:core:log,你需要确保子模块加载了Android插件之后,再添加依赖。把以下代码放在当前模块的build.gradle.kts根级别(和plugins、android同级):
plugins { id("sage.android.library") } android { namespace = "com.sage.feature.work" } // 配置当前模块的所有子模块 subprojects { // 监听子模块应用Android库插件的事件,确保配置存在后再添加依赖 plugins.withId("sage.android.library") { // 替换成你子模块实际用的Android插件ID dependencies { implementation(project(":core:log")) } } }
补充说明
- 如果你的子模块有的用
com.android.application插件,有的用com.android.library,可以同时监听多个插件ID:subprojects { plugins.withId("com.android.library") { dependencies { implementation(project(":core:log")) } } plugins.withId("com.android.application") { dependencies { implementation(project(":core:log")) } } } - 这种写法的核心是通过
plugins.withId延迟依赖配置的执行,直到子模块加载了对应的插件,确保implementation配置已经存在,避免报错。
内容的提问来源于stack exchange,提问作者SageJustus
相关产品推荐
相关产品推荐

