Android gradle 3.0 插件有4种引入方式
* implementation 相当于原来的compile
* api 相当于原来的compile
* compileOnly 相当于原来的provided
* runtimeOnly 相当于原来的apk
此时需要注意的一个地方,例如一个叫A的lib里面用implementation引用一个B库,又有一个C的module(不管是lib还是app)引用了A,这个C的module是引用了不了B的,也就是不能使用B库里面的类和方法。这也是为什么使用implemention会加快构建速度的原因,可以减少重复编译。要想引用B到的库,可以使用api。在3.0中,api用法可以完全可以替换之前的compile,不用担心编译问题。
implementation:C引用A,即使A库implementation方式引用B,C也不会引用B
api :C引用A,并且A库用api方式引用B,C会引用B
compileOnly 只依赖库用来编译,不会把库打包进apk,在一些特定的场景很有用
runtimeOnly 不用来编译,但是会打包到apk,这个方式是deprecated(不推荐使用)的