Volley迁移至Retrofit时遇OkHttp重复依赖冲突问题求助
解决Retrofit迁移中的OkHttp重复类冲突问题
这个问题我之前帮团队排查过好几次,本质就是项目中重复引入了OkHttp依赖导致的类打包冲突——Retrofit本身默认依赖OkHttp,而你项目里的其他第三方库(比如旧版的图片加载框架、遗留的网络工具库)也自带了相同版本的OkHttp,就会出现Duplicate zip entry这个报错。
下面是具体的解决步骤:
1. 先定位重复依赖的来源
打开终端,在项目根目录执行Gradle命令查看完整依赖树:
# Mac/Linux ./gradlew app:dependencies # Windows gradlew app:dependencies
在输出结果里搜索okhttp,你会看到多个依赖库都引入了okhttp3:okhttp:3.10.0,这就是冲突的根源。
2. 排除重复的OkHttp依赖
找到带重复OkHttp的第三方库后,在app/build.gradle里给该依赖添加排除规则,比如假设是com.xxx.oldlibrary:1.2.3带了重复依赖:
implementation('com.xxx.oldlibrary:1.2.3') { // 排除该库自带的OkHttp exclude group: 'com.squareup.okhttp3', module: 'okhttp' }
如果有多个库都带了重复依赖,或者你想统一项目里的OkHttp版本,可以在根目录的build.gradle里添加强制版本规则:
allprojects { repositories { google() jcenter() // 你的其他仓库配置 } configurations.all { resolutionStrategy { // 强制所有依赖使用指定版本的OkHttp force 'com.squareup.okhttp3:okhttp:3.10.0' // 也可以升级到更稳定的兼容版本,比如3.12.13(适配compileSdk 27) // force 'com.squareup.okhttp3:okhttp:3.12.13' } } }
3. 清理缓存后重新构建
执行以下命令清理Gradle缓存和构建产物,避免旧缓存导致的问题:
./gradlew clean build
额外提示
你的targetSdkVersion设置为22,虽然和本次冲突无关,但建议尽量升级到和compileSdkVersion一致的27,这样能避免很多系统API兼容问题,也能更好地适配Retrofit和OkHttp的特性。
内容的提问来源于stack exchange,提问作者Abhishek Bardolia
相关产品推荐
相关产品推荐

