前言
首先是2.x版本的依赖方式
再来看看3.0的
可以看出3.0中compile已经被弃用,被implementation和api替代,provided被compile only替代,apk被runtime only替代。
implementation和api的区别:
api:跟 2.x 版本的 compile完全相同
implementation:使用了该命令编译的依赖,1. 加快编译速度。2. 隐藏对外不必要的接口。例如:模块B依赖模块A,模块C依赖模块B,那么那么C将依赖不到A,这就是implementation
关键字的作用。
建议:
在Google IO
相关话题的中提到了一个建议,就是依赖首先应该设置为implement
的,如果没有错,那就用implement
,如果有错,那么使用api
指令,这样会使编译速度有所增快。
为什么能加快编译速度呢?
这对于大型项目含有多个模块的,,比如我们改动 模块A
接口的相关代码,这时候编译只需要单独编译模块B就行, 如果使用的是api
或者旧时代的compile
,由于C也可以访问到 A
,所以C部分也需要重新编译。当然这是在全编的情况下。
provided(compileOnly) 只在编译时有效,不会参与打包
apk(runtimeOnly) 只在生成apk的时候参与打包,编译时不会参与,很少用。
testCompile(testImplementation) testCompile 只在单元测试代码的编译以及最终打包测试时有效。
debugCompile(debugImplementation) debugCompile 只在 debug 模式的编译和最终的 debug打包时有效
releaseCompile(releaseImplementation) Release compile仅仅针对 Release 模式的编译和最终的 Release 打包。