首先在androidstudio3.x中compile已经过时
由implementation和api来代替
其次compile与api完全等同 3.x中可以完全将compile换成api
mplementation与api的区别
implementation编译的依赖只作用于当前的module。即app module依赖了other module,
other module中使用implementation编译的三方库(如glide)只对other module起作用,
app module中无法使用该三方库(glide);
如果other module 使用implementation依赖了base module,则app module中无法使用base module。
举个示例:
我们把其它module中的对com.alibaba.fastjson:1.2.6引用改成implementation
那么我们在app module里面是无法使用的 因为implementation 只对当前module生效
便会提示:错误: 程序包com.alibaba.fastjson不存在
总体介绍
compile(api)
这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。
provided(compileonly)
只在编译时有效,不会参与打包,可以在自己的moudle中使用该方式依赖。比如com.android.support,gson这些使用者常用的库,避免冲突。
apk(runtimeonly)
只在生成apk的时候参与打包,编译时不会参与,很少用。
testcompile(testimplementation)
testcompile 只在单元测试代码的编译以及最终打包测试apk时有效。
debugcompile(debugimplementation)
debugcompile 只在debug模式的编译和最终的debug apk打包时有效。
releasecompile(releaseimplementation)
releasecompile 仅仅针对release模式的编译和最终的release apk打包。