解决依赖冲突步骤
一.查看依赖关系,找到有冲突的依赖
二.剔除部分依赖关系,或强制使用某指定版本的依赖关系。
一、查看依赖关系
使用如下命令:gradlew :[module_name]:dependencies
如:查看app Module的依赖关系,输入如下命令:
gradlew :app:dependencies
Mac系统下需在gradlew前加"./"即,./gradlew :app:dependencies
其他参考命令:
./gradlew dependencies
# 或者模组的 依赖
./gradlew app:dependencies
# 检索依赖库
./gradlew app:dependencies | grep CompileClasspath
# windows 没有 grep 命令
./gradlew app:dependencies | findstr "CompileClasspath"
# 将检索到的依赖分组找到 比如 multiDebugCompileClasspath 就是 multi 渠道分发的开发编译依赖
./gradlew app:dependencies --configuration multiDebugCompileClasspath
# 一般编译时的依赖库,不是固定配置方式,建议检索后尝试
./gradlew app:dependencies --configuration compile
# 一般运行时的依赖库,不是固定配置方式,建议检索后尝试
./gradlew app:dependencies --configuration runtime
如果你不想在命令终端中查看,而是想把依赖关系输出到文件中,则可以使用以下命令:
gradlew :[module_name]:dependencies > [output_file]。
例如将app module的依赖关系输出到dependence.txt文件中:
gradlew :app:dependencies > dependence.txt。
二、剔除依赖关系
通过移除某个第三方中特定的依赖。
使用exclude group:'group_name':module:'module_name'方式剔除具体依赖,如果没有指定module_name则该group下所有的依赖都会被剔除,具体使用:
//剔除rxpermissions这依赖中所有com.android.support相关的依赖,避免和我们自己的冲突implementation 'com.github.tbruyelle:rxpermissions:0.10.2',{
exclude group:'com.android.support'
exclude group:'xxxxx'
}//剔除 tm_navigation(这里是本地依赖)中依赖的springview
implementation project(path:':tm_navigation'),{
exclude group:'com.liaoinstan.springview',
module:'library'
}
关于group和module的概念,举一个例子就清楚了。
例如对于依赖implementation 'com.android.support:appcompat-v7:27.1.0'。
group为com.android.support,module为appcompat,版本号为27.1.0,同一个group下面可以有很多module的。
下面这种方式可以批量剔除整个工程中的相关依赖
android{//....//剔除工程中所有的该依赖
configurations{
all*.excludegroup:'org.hamcrest',module:'hamcrest-core'
}
}
强制版本
有时候依赖传递层级过深或者数量过多,通过上面的方式则不能达到剔除的效果,这时候强制使用版本
android{//....//强制使用
configurations.all{
resolutionStrategy{
force'com.google.code.gson:gson:2.8.5'
}
}
}