引入OkHttp 4后原有依赖OkHttp 3的Retrofit 2项目代码报错如何解决
问题解答
能否同时使用两个版本的OkHttp库
默认情况下无法直接在同一个项目中同时使用两个版本的OkHttp。Gradle处理依赖冲突时会默认选择最高版本的依赖,且同一个包名的类在类加载时只会被加载一次,高版本的类会直接覆盖低版本实现,最终只会有一个版本的OkHttp生效。
如果确实需要同时使用两个版本,可以通过Shadow插件对其中一方的OkHttp依赖进行重打包,修改其包名路径避免冲突,但该方案操作复杂度高,仅作为特殊场景下的备选。
报错原因说明
你遇到的所有构建报错都是OkHttp 4.x的API不兼容导致的:
OkHttp 4.x采用Kotlin重构后,原3.x版本中的Java风格Getter方法(如uri()、method()、body()等)全部调整为Kotlin属性,parse()方法调整为扩展函数,uri()方法替换为toUri(),因此适配OkHttp 3.x的代码在4.x版本依赖下会触发上述编译错误。
Android Studio没有高亮提示是因为IDE索引和实际构建依赖版本不同步,执行File -> Invalidate Caches重启IDE后就会显示对应的代码报错。
推荐解决方案
优先选择升级原有项目代码适配OkHttp 4.9.1,该方案成本最低且可长期维护:
- 原
uri()调用替换为toUri() - 原
method()、body()、code()等Getter调用,Java代码可替换为对应的getMethod()、getBody()、getCode(),Kotlin代码可直接调用对应属性 - 原
MediaType.parse()调用替换为MediaType.get() - Retrofit 2.9.0完全兼容OkHttp 4.x版本,适配后原有功能不会受影响
如果实在不想调整原有代码,可尝试对第三方库的OkHttp依赖进行排除,但该方案会导致第三方库运行异常,不推荐。
内容的提问来源于stack exchange,提问作者user2164852
相关产品推荐
相关产品推荐

