我的项目的开发过程中,咱们或多或少都会引入第三方库,引入的库越多,越容易产生库之间的依赖抵触。
上面就拿我遇到的问题还原一下:
之前接人容联客服零碎的时候,集成实现后进入客服页面产生闪退,咱们回顾一下错误信息:
咱们要害看一下报错代码:
java.lang.NoSuchMethodError: No virtual method into (Landroid/widget/ImageView;)Lcom/bumptech/glide/request/target/Target; in class Lcom/a/a/i; or its super classes (declaration of 'com.a.a.i' appears in/data/app/com.sami91sami.h5-1/base.apk)
咱们能够依据报错,跳到报错的中央:
该报错的意思就是:没有
into(Landroid/widget/ImageView)
的办法,代码能编译通过,阐明我的项目中必定是增加依赖了,那怎么还会报这个谬误呢?还没增加依赖之前,我的项目中也是应用的 Glide 进行图片的加载,会不会是我的项目中的 Glide 与容联 Demo 中的 Glide 有抵触呢。
咱们能够依据报错的中央 into 办法,点进入看源码:
能够看到容联 Demo 应用的 Glide 版本是 3.7.0。
再来看看我的项目中 Glide 应用的版本:
能够看到我的项目中应用的 Glide 版本是 4.5.0。
这时就想到真的很大概率是两者的 Glide 版本有抵触了。
果然将容联 Demo 中的 Glide 版本改成 4.5.0 之后,编译运行进入客服界面后,没有报错了,完满解决。
这就是我之前遇到的库抵触的问题,这个问题有错误信息能够定位到是 Glide 库依赖的问题,要是遇到其它错误信息没那么显著的,那是不是就头疼了呢。
过后遇到这个问题,我并没有应用查看依赖树的形式,而是间接查看了源码,因为过后我并不知道还能这么干,侥幸的是很快就定位到了问题所在,所以当咱们降级第三方库或者引入新的第三方库时,库与库之间依赖抵触,咱们须要晓得每个第三方依赖库的依赖树,晓得依赖树就分明哪里抵触啦。
上面就记录下几种查看依赖树的形式:
计划一:Gradle task 工具查看
1、点击 Android studio 面板右上角“Gradle”,如图所示:
2、依照如图目录找到 dependencise 双击,会在 Run 控制台输入打印,如图所示:
3、打印如图所示:
计划二:应用 Gradle View 插件
1、快捷键 Ctrl+Alt+s,关上 settings,而后点击按钮 Plugins
2、搜寻 Gradle View,而后装置,并重启 Android Studio,我这是曾经装置胜利后的截图
3、点击菜单栏上 View -> Tool Windows -> Gradle View,而后期待一会,就能够查看了。
如图所示:
计划三:Terminal 控制台查看
在 windows 上 Android studio Terminal 中应用这个命令:
gradlew :app:dependencies(“app”为 module 名称)
在 MacOS 中应用上面的命令:
./gradlew :app:dependencies(“app”为 module 名称)
这个命令会将 gradle 执行的各个步骤都打印进去,包含 releaseUnitTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseRuntimeClasspath,releaseCompileClasspath,lintClassPath,debugUnitTestRuntimeClasspath 等等。
那么,咱们能够配置 configuration 参数只查看其中一个的依赖树就够了。
./gradlew :app:dependencies --configuration compile
在 Window 零碎下,无需应用./ 结尾,间接应用 gradlew 即可。
执行 app 模块下的 dependencies 工作;额定配置 compile, 编译环境下的依赖项。
通过查看依赖树,咱们就能看到哪些依赖有抵触,比方某个框架的 support 包抵触,只有在 moudle 的 gradle 文件下找到该抵触的依赖用括号括住,在前面加:
{exclude group:'com.android.support'}
这要就能够把该框架的 support 包移除啦。
本文转自 https://juejin.cn/post/7039918795242569765,如有侵权,请分割删除。