api 相当于原来的 compile,
implementation 相当于有特殊功能的 compile。
比如:
3个Module:A, B, app
app 的 build.gradle
dependencies {
implementation project(':A')
}
A 的 build.gradle
dependencies {
implementation project(':B')
}
当使用 implementation 来引用其他模块时,如上例,在 app 模块中将不能使用 B 模块的文件,如果需要在 app 文件中引用 B 模块的文件,那么需要在 app 的 build.gradle 引用B 模块,
implementation project(':B')
。
当时用 api 来引用模块时:
app 的 build.gradle
dependencies {
api project(':A')
}
A 的 build.gradle
dependencies {
api project(':B')
}
功能相当于原来的 compile,在 app 模块中能引用 B 模块的文件。
综上
一般情况下不建议使用 api,因为会向外暴露引用的依赖,倒置 gradle 编译时需要频繁遍历所有嵌套依赖,影响推荐速度,所以更推荐使用 implementation。
引申问题之 support 文件冲突
必须使用 api 时,有时候会出现引用文件版本冲突的问题,可以通过 exclude 来解决。
当出现 support 文件冲突的时候, 可以通过 api 与 exclude 的搭配使用来处理
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'
api("...") {
exclude group: 'com.android.support'
}
总结
最近在看这个,感觉自己落伍好多了,文笔好差劲
如果有人看,如果有人发现问题
终于有了目标,一切向qian看
浙公网安备 33010602011771号