最近在做一个hotfix依赖库的引入时,出现了一个奇怪的现象。
项目中出现了同一个依赖库的两个不同版本,而我想使用的一个新的方法在高版本的依赖库里有,低版本的库没有。
这导致了我调用不了想用的方法。
即便可以调用,出现两个版本的同一依赖库也是有问题的。
我们应当保证同样的依赖库只在项目里存在同一版本。
那么这个问题是如何出现的呢?
其实根本原因在于在某个你不知道的地方有依赖把它引入了。
这个现象困扰了我很久,最终在同事的帮助下,我找到了原因,也学习了处理这种问题的方法。
1 检查项目依赖树
Android项目依赖树的检查方法有很多种,这里简单说两种。
一种是在android studio界面右上部分的gradle选项里找到app->help->dependencies任务。
点击之后会执行dependencies的task,慢慢在run的tab页面里输出依赖树内容,之后可以在里面检索。
第二种是在项目的目录下使用 ./gradlew :app:dependencies > dep.txt命令输出一个依赖树文件。
二者的本质原理是一样的,只不过第二种方法可以输出文件便于多次使用查询。(输出时项目大的话会耗费一些时间,给人感觉是卡住了,直到项目目录下有新文件生成便是输出成功。)
通过检查依赖树的方法我们能够定位到重复的依赖库是在哪个地方被错误引入的。
2 移除多余的依赖库
现在的项目使用自己制作的库以及第三方库很容易引入同名不同版本的库,针对于这种情况,我们需要使用exclude语句在gradle文件里移除指定的依赖库。
举个例子
implementation ("androidx.core:core-google-shortcuts:1.0.1") {
exclude group: 'com.jakewharton.threetenabp', module: 'threetenabp'
}
通过如上这种方式我们就可以在引入一个依赖库时,移除这个依赖库自己引用的依赖库。避免项目出现同类型依赖库引入多个不同版本。
3 检查移除是否生效
检查移除是否生效的快速方法就是在android studio的project项目查看方式下,找到External Libraries目录。在这个目录下查看多余的依赖库是否已经被移除。
这个目录是以名称排序,检查起来非常方便。