能否像Gradle api依赖那样让库插件自动应用至引用它的App?
问题解答
不行,你没法通过在Android库的plugins块中应用插件,让引用该库的App自动应用这个插件。原因如下:
- Gradle的插件应用机制和依赖传递机制是完全独立的两个体系
- 在库模块的
plugins块里声明id("my plugin"),只会让这个插件作用于当前库模块的构建流程,不会把插件传递给依赖它的App模块。插件的作用范围默认就是当前配置它的Gradle模块,没有类似api那样的传递性配置。 api依赖是针对代码/库依赖的传递性配置,它的作用是让下游模块能访问该依赖的公开API,但这种传递逻辑不适用于插件——插件是用来扩展Gradle构建逻辑的,不属于代码依赖范畴。
- 在库模块的
如果想要让引用该库的App自动应用插件,有几种可行的替代方案:
- 自定义一个Gradle插件,在插件内部同时处理库依赖的引入和自身的应用,让App模块直接应用这个自定义插件,就能同时完成依赖引入和插件应用。
- 在库的构建脚本中提供一个"约定"配置,比如通过
project.ext暴露插件应用方法,让App模块在引入库依赖时调用该方法来应用插件(不过这种方式还是需要App显式操作)。 - 使用Gradle的预编译脚本插件,把库依赖和插件应用逻辑封装到一个脚本插件中,让App直接应用这个脚本插件即可。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

