当gradle插件升级到3.0.0及以上后,我们会发现在gradle中添加依赖的时候,会推荐你使用
implementation或者api,而不再推荐你使用compile,今天就来简单介绍下这两者的使用与区别!让小伙伴们可以有目的的去选择implementation或者api。
api
api的作用与compile相同,使用api添加依赖,会对外暴露其依赖的module的接口
下面举个小例子:
moduleA添加的依赖
api project('moduleB')
moduleB添加的依赖
api 'com.xxx.xxx:lib'
假如moduleB添加依赖lib,而moduleA添加moduleB作为依赖,则此时moduleA也可以使用lib中提供的接口
implementation
- 使用
implementation添加依赖,其所添加的依赖仅对当前所在的module提供接口,不会对外暴露接口
下面举个小例子:
moduleA添加的依赖
api project('moduleB')
moduleB添加的依赖
api 'com.xxx.xxx:lib'
假如moduleB添加依赖lib,而moduleA添加moduleB作为依赖,此时moduleA也不能使用lib中的提供的接口
特性
- 提高项目的可读性
- 隐藏不必要对外开放的接口
- 加快编译速度
加快编译速度是什么鬼?
在大型项目中,会依赖多个lib且多层级依赖,如上面的小例子(app module依赖module B,moduleB依赖lib1、lib2、lib3...),此时使用api添加依赖,则app module也可以访问到lib1、lib2、lib3,当只需要改动一个lib1时,因为app module也可以访问到lib1,所以app module部分也会和module B一起被重新编译,而使用implementation则可以最大程度的避免这种情况。
另外,当不同的依赖module使用不同版本的lib(例如:不同版本的v7包),implementation可以最大程度的防止包冲突,并且在编译后会使用最高版本的lib
建议
-
compile在3.x版本的gradle中已被废弃,将在2018年底,被google移除,所以不要使用compile了 - 依赖首先应该设置为
implementation,如果没有错误,那就用implementation,如果有错,那么使用api指令
