解决Android项目中第三方库依赖冲突的方法

解决依赖冲突步骤

一.查看依赖关系,找到有冲突的依赖

二.剔除部分依赖关系,或强制使用某指定版本的依赖关系。


一、查看依赖关系

使用如下命令: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'

        }

    }

}

你可能感兴趣的:(解决Android项目中第三方库依赖冲突的方法)