集成Retrofit日志拦截器时遭遇Multiple dex文件定义冲突错误求助
解决Retrofit日志拦截器集成时的Dex重复定义问题
Hey,这个问题我之前也踩过坑!Multiple dex files define Lokhttp3/ResponseBody$BomAwareReader本质是项目里多个依赖库重复引入了OkHttp3的同一个类,导致Dex打包时合并冲突了。结合你给出的依赖配置,大概率是老版本的Google Play Services(12.0.1)和Retrofit依赖的OkHttp版本不一致或者重复引入了。
下面是具体的解决步骤:
1. 先排查重复依赖根源
执行Gradle命令查看项目的依赖树,找出重复的OkHttp引用:
# Mac/Linux ./gradlew app:dependencies # Windows gradlew app:dependencies
在输出结果里搜索okhttp,就能看到哪些依赖库偷偷引入了OkHttp(比如Play Services的某些模块可能自带了旧版OkHttp)。
2. 排除重复的OkHttp依赖
找到重复引入的来源后,在对应的依赖里排除OkHttp模块。比如如果是Play Services的base模块带的,就修改依赖配置:
implementation("com.google.android.gms:play-services-base:12.0.1") { exclude group: "com.squareup.okhttp3", module: "okhttp" }
同理,其他Play Services模块如果也带了OkHttp,都可以用同样的方式排除。
3. 强制统一OkHttp版本(更稳妥的方式)
直接让整个项目所有依赖都使用同一个版本的OkHttp,避免版本不一致的冲突。在你的build.gradle(Module级别)里添加:
configurations.all { // 选一个和Retrofit兼容的稳定版本,比如4.9.3,可根据你的Retrofit版本调整 resolutionStrategy.force 'com.squareup.okhttp3:okhttp:4.9.3' resolutionStrategy.force 'com.squareup.okhttp3:logging-interceptor:4.9.3' }
4. 清理缓存后重新构建
有时候Gradle缓存会残留旧的依赖文件,执行清理命令后再构建:
# Mac/Linux ./gradlew clean build # Windows gradlew clean build
额外建议:升级Play Services版本
你用的12.0.1版本真的太老了,不仅容易出现依赖冲突,还存在安全漏洞。建议升级到较新的稳定版本(比如17.6.0及以上),升级后很多依赖兼容问题会自动消失。
内容的提问来源于stack exchange,提问作者argonath88
相关产品推荐
相关产品推荐

