你是否还在为依赖冲突而费时费力?
你是否看到gradle报了重复jar包或重复类而不知所措?
那么,这篇文章,教你彻底解决依赖冲突问题 ~
冲突类型无非是类、jar包重复,比如:
在此不多做介绍了,直接上解决方案
解决步骤:
一、精确查找有冲突的依赖库
在App模块的build.gradle配置
位置如下:
---> app (项目运行模块) --- > build.gradle: (gradle配置文件) ---> android: (android 配置项) --- > defaultConfig: (defaultConfig 配置项)
1、配置显示冲突依赖详细信息
defaultConfig{
configurations.all {
resolutionStrategy {
// 显示冲突的依赖库版本信息
failOnVersionConflict()
}
}
}
2、编译,查看控制台详细输出
显示项目中存在 4.9.0、4.5.0 和 3.7.0 三个版本的 glide
3、直接修改对应依赖版本(无法修改的情况,请看以下“二”、 “三” 解决方案)
修改对应模块的 build.gradle 里面修改即可
dependencies {
implementation "com.github.bumptech.glide:glide:4.9.0"
}
二、使用exclude进行依赖排除
使用依赖排除的方式
1、project依赖排除示例
// 引用 eduhdsdk 模块,并排除 umeng的common模块
api (project(': eduhdsdk')){
exclude group: 'com.umeng.umsdk', module: 'common'
}
2、远程依赖排除示例
// 引用 socket.io-client 库,并排除 json 模块
implementation("io.socket:socket.io-client:1.0.0") {
exclude group: 'org.json', module: 'json'
}
三、使用全局强制指定依赖版本
部分情况,可能使用 exclude 排除无法解决,则可以进行全局强制指定依赖库版本
configurations.all {
resolutionStrategy {
// 强制使用 28.0.2 版本的 support 包
force 'com.android.support:support-v4:28.0.2'
// 强制使用 4.9.0 版本的 glide 库
force 'com.github.bumptech.glide:glide:4.9.0'
failOnVersionConflict()
}
}
补充:
1. 要移除的jar包在aar包中的classes.jar中
核心:
① 解压aar文件到tmpDir目录下
unzip ×××.aar -d tmpDir
② 找到classes.jar包,用压缩工具打开,删除目标文件
③ 将tmpDir重新打包成一个新的aar
jar cvf ×××NewLib.aar -C tmpDir/ .