出现这个异常通常都是依赖冲突导致,需要查看下引入三方库之间的依赖关系,找出问题所在。
使用Gradle开发中,或多或少都会引入三方库,但是三方库又会有自己的子依赖,那么真正依赖到版本中的版本是多少呢?其实官方也有给出查看方法,官方说明点这里,采用以下方式可查看:
查看依赖版本
在studio上右侧的task中adroid里点击运行androidDepencies
releaseCompileClasspath - Dependencies for compilation
+--- E:\Android\Android workSpace\feigePushDemo\ReadingTea\libs\flame.jar
+--- E:\Android\Android workSpace\feigePushDemo\ReadingTea\libs\GetuiExt-2.0.3.jar
+--- E:\Android\Android workSpace\feigePushDemo\ReadingTea\libs\GetuiSDK2.8.1.0.jar
+--- E:\Android\Android workSpace\feigePushDemo\ReadingTea\libs\Msc.jar
+--- E:\Android\Android workSpace\feigePushDemo\ReadingTea\libs\pgyer_sdk_2.4.2.jar
+--- E:\Android\Android workSpace\feigePushDemo\ReadingTea\libs\Sunflower.jar
+--- E:\Android\Android workSpace\feigePushDemo\ReadingTea\libs\tbs_sdk_thirdapp_v2.6.0.1045_36900_sharewithdownload_obfs_20161207_162008.jar
+--- E:\Android\Android workSpace\feigePushDemo\ReadingTea\libs\universal-image-loader-1.9.4.jar
+--- E:\Android\Android workSpace\feigePushDemo\ReadingTea\libs\wechat-sdk-android-with-mta-5.1.4.jar
+--- E:\Android\Android workSpace\feigePushDemo\ReadingTea\libs\xUtils-2.6.14.jar
+--- :WordPressEditor (variant: release)
还可以用命令查看,这里就不多说了,可以自己查看官网。
依赖说明如下:
- 版本:唯一的依赖。
- 版本(*):还存在该库其他版本的依赖或者间接依赖,并且默认选择()所标注的版本。
- 版本1->版本2(*):还存在该库其他版本的依赖或者间接依赖,并且选择 版本2。
Gradle冲突说明
gradle是比较智能的了,也能智能的处理相同包不同版本的冲突,会默认依赖较新的一个版本。但是如果是不同包之间的冲突,那么就会报错,得需要人为来解决了。报如下错误:
Program type already present: android.support.design.widget.CoordinatorLayout$Behavior
Message{kind=ERROR, text=Program type already present: android.support.design.widget.CoordinatorLayout$Behavior, sources=[Unknown source file], tool name=Optional.of(D8)}
那么我们通过前面的命令可以查依赖树,但是解决这种冲突光看依赖树还不行,得结合报错,CoordinatorLayout$Behavior,我们在出问题的情况下全局搜索(双击shift,记得够上从选择框)一下CoordinatorLayout,就能看到是在哪两个库中存在了。
例如,处理下如下:
implementation 'com.android.support:design:26.1.0'
//glide
implementation('com.github.bumptech.glide:glide:4.7.1') {
/*排除依赖,这下面的依赖会与design报错
* 所以处理方式如下
* */
exclude group : "com.android.support" , module: "support-fragment"
}
其实 要是android.support.design.widget.CoordinatorLayout$这里报错的话,还可以引入个新版的。
implementation 'com.android.support:design:27.1.0'
这只是冲突的一种解决方法,和思路,遇到其他的冲突问题,要看具体的冲突包,然后用相应的办法处理。