当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
指令