解决Program type already present okhttp3 OkUrlFactory错误

今天合并React Native分支到主分支的时候遇到Android Studio报错 Error:Program type already present: okhttp3.OkUrlFactory$1,记录一下解决的过程。

一、错误原因

从报错的英文来说,猜测是gradle 依赖出问题了,OkUrlFactory被两次加载。

在项目中搜索 OkUrlFactory 类,果然发现了两份:

(1)com.squareup.okhttp3:urlconnection:3.6.0@jar 里面有一份
(2)com.squareup.okhttp3:urlconnection:3.8.1@jar 里面有一份

那为什么会产生两份呢?

3.6.0版本是我的React Native 0.49 引用使用的。

3.8.1版本来源于手动引用的一个jar包。

一般来说,如果传递依赖都通过compile引入,那么Gradle会自动使用较高的那个版本。

而像上面这个,一个通过jar一个是React Native的传递依赖,所以造成了冲突。

二、解决办法

因为已经有React Native的 com.squareup.okhttp3:urlconnection

将手动引用的jar包去掉。

推荐阅读更多精彩内容