You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android多Dex转换报错求助:WebSocketReader类重复定义

解决Multiple dex files define Lokhttp3/internal/ws/WebSocketReader错误

这种重复DEX定义的问题确实挺让人挠头的,结合你提到的和Retrofit相关的推测,我整理了几个针对性的排查和解决步骤,应该能帮你定位根源:

  • 第一步:排查依赖树,找到重复的OkHttp依赖
    先执行Gradle命令查看项目的完整依赖树,找出所有包含OkHttp的模块:

    ./gradlew app:dependencies
    

    在输出里搜索okhttp和okhttp-ws,重点看不同依赖引入的OkHttp版本是否不一致——Retrofit本身依赖OkHttp作为底层客户端,很可能是其他第三方库引入了冲突版本的OkHttp,导致WebSocketReader类重复定义。

  • 第二步:强制统一OkHttp版本
    在你的app模块的build.gradle中添加版本强制策略,确保所有依赖都使用同一个稳定版本的OkHttp(注意Retrofit和OkHttp版本要匹配,比如Retrofit 2.9.x对应OkHttp 4.x系列):

    configurations.all {
        resolutionStrategy.force 'com.squareup.okhttp3:okhttp:4.9.3' // 替换为你需要的兼容版本
        resolutionStrategy.force 'com.squareup.okhttp3:okhttp-ws:4.9.3' // 如果项目用到WebSocket相关模块
    }
    
  • 第三步:排除特定依赖中的重复OkHttp模块
    如果通过依赖树发现某个第三方库自带了冲突的OkHttp模块,可以直接在依赖声明中排除它:

    implementation('com.example:problem-library:1.0.0') {
        exclude group: 'com.squareup.okhttp3', module: 'okhttp'
        exclude group: 'com.squareup.okhttp3', module: 'okhttp-ws'
    }
    
  • 第四步:清理缓存并重建项目
    有时候旧的编译缓存会导致问题残留,执行以下命令清理后重新编译:

    ./gradlew clean
    

    或者在Android Studio中点击File -> Invalidate Caches / Restart,彻底清除缓存后再构建项目。

  • 额外注意:检查OkHttp-WS模块的引入
    OkHttp3后期已经将WebSocket功能整合到核心库中,如果你同时引入了okhttp-ws和新版okhttp,很可能会导致类重复。这种情况下直接移除okhttp-ws依赖,只用核心的okhttp库即可。

内容的提问来源于stack exchange,提问作者Sameer Jani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:51:36