今天合并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包去掉。