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

Android Studio构建失败:Program type already present: okhttp3.Call$Factory求助

解决「Program type already present: okhttp3.Call$Factory」构建错误

这个错误我之前帮好几个开发者排查过,本质就是依赖冲突——你的项目里有两个不同来源的依赖包都包含了okhttp3.Call$Factory这个类,D8编译器在合并字节码的时候发现重复定义,直接抛出了这个晦涩的错误。下面给你一步步的解决办法:

第一步:找出重复依赖的来源

先搞清楚到底是哪两个依赖在抢着引入okhttp:

  • 打开Android Studio底部的Terminal,执行命令(Windows用户把./gradlew换成gradlew.bat):
    ./gradlew app:dependencies
    
  • 在输出的依赖树里搜索okhttp,你会看到哪些依赖直接/间接引入了它——比如可能是你自己加的okhttp依赖,和某个第三方SDK自带的旧版okhttp撞了,或者两个不同的第三方库都带了okhttp。

第二步:根据情况解决冲突

方法1:排除重复的间接依赖

如果发现某个第三方库(比如com.xxx.xxx:sdk:1.0.0)偷偷引入了okhttp,就在它的依赖声明里把okhttp排除掉,让它用你项目里统一的版本:

implementation('com.xxx.xxx:sdk:1.0.0') {
    exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}

方法2:统一okhttp版本

如果你的build.gradle里没有直接声明okhttp依赖,建议直接加一个明确的稳定版本,强制所有间接依赖都使用这个版本:

implementation 'com.squareup.okhttp3:okhttp:4.11.0' // 可以换成你需要的最新稳定版

Gradle会自动用这个版本覆盖所有间接引入的旧版本,避免冲突。

方法3:检查libs目录下的jar包

你的依赖配置里有implementation fileTree(include: ['*.jar'], dir: 'libs'),去项目的libs文件夹看看有没有okhttp相关的jar包。如果有,同时gradle依赖里又加了okhttp,就会导致重复——要么删掉libs里的jar包,要么删掉gradle里的okhttp依赖,二选一即可。

最后一步:清缓存重启

修改完依赖后,记得点击Android Studio顶部的File -> Invalidate Caches... -> Invalidate and Restart,清理一下缓存再重新构建,很多时候冲突解决后缓存还会残留旧的字节码,导致问题反复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:42:12