问题说明: 什么情况下会产生依赖冲突?
当你引入了一个包的不同的版本的情况下会产生冲突。
如:你引入了
implementation 'android.arch.lifecycle:runtime:1.1.0'
implementation 'android.arch.lifecycle:extensions:1.1.0'
android.arch.lifecycle:extensions
其实本身会引入android.arch.lifecycle:runtime
, 因为是引入了 1.1.0
,所以和我们自己本身引入的implementation 'android.arch.lifecycle:runtime:1.1.0'
不会造成冲突。
但是如果
implementation 'android.arch.lifecycle:runtime:1.1.0'
implementation 'android.arch.lifecycle:extensions:1.0.0'
这样就会冲突了,因为同时引入了2个android.arch.lifecycle:runtime
,而且这2个分别为1.1.0
和1.0.0
。
-
gradle sync是成功的,但是运行会报错
但是只是说了merge错误,但是没有具体指明是哪个包引用冲突了。这样的话就很难找了。
-
定位冲突
在右侧栏中找到这个任务,双击执行。
这样我们就能定位是哪个包下。
目前确定是android.arch.lifecycle
这个包可能引入了2个不同的版本。
下面我们在自己的app项目下 build.gradle中添加一个任务
task allDeps(type: DependencyReportTask) {}
来打印所有模块依赖。
还是在右侧栏的任务中找到 allDeps
双击运行。
搜索
发现了引入2个不同的包的runtime.这时我们修改为
implementation 'android.arch.lifecycle:runtime:1.1.0'
implementation 'android.arch.lifecycle:extensions:1.1.0'
重新运行,就成功了。