Android中gradle的implementation和ap
2018-06-04 本文已影响5人
hongjay
众所周知。bmob提供的Androidsdk必须要去掉重复依赖才能使用。
implementation 'cn.bmob.android:bmob-sdk:3.6.2'

如图所示。bmob依赖了gson、okio、rx等jar
这个问题在as3.0以前可以通过去除okhttp中的okio,不依赖gson来解决。
但是到3.0以后我使用implementation 来依赖bmob的sdk竟然在代码中出现了无法找到gson相关文件的错误。
如果再在引用gson库则可以用过编译,而运行时提示
Program type already present: com.google.gson.annotations.Since
表示依赖冲突了。
// api rootProject.ext.dependencies["gson"]
implementation ('cn.bmob.android:bmob-sdk:3.6.2') {
exclude group: 'com.google.code.gson'
}
我考虑来考虑去。。还以为bmob有啥黑科技。或者我依赖的底层框架有问题。(MVPArms)
然后我去除gradle中重复的gson依赖

代码修正提示Add library 。但这样选择后并没有解决问题。运行后依旧出现这个提示。
这时候我就很怀疑是不是没有真正的依赖上。
然后我修改了依赖api为
// api rootProject.ext.dependencies["gson"]
api('cn.bmob.android:bmob-sdk:3.6.2') {
exclude group: 'com.google.code.gson'
}
问题迎刃而解。
所以问题的源头出在没有理解gradle的依赖指令上。

api 指令
跟2.x版本的 compile完全相同
implementation指令
只能在内部使用此模块,比如在一个libiary中使用implementation依赖了gson库,然后主项目依赖了libiary,那么,我的主项目就无法访问gson库中的方法,这样的好处是编译速度会加快。而我的app模块引用了底层模块,但底层模块使用implementation依赖了bmobsdk导致了错误。