应用中能否同时引入两个不同版本的OkHttp库?附依赖崩溃问题
OkHttp3与OkHttp2共存问题解决方案
其实你完全可以在app的build.gradle中同时保留这两个OkHttp版本的依赖,核心原因在于OkHttp2和OkHttp3的包名完全不同:
- OkHttp2的类都在
com.squareup.okhttp包下 - OkHttp3的类则在
com.squareup.okhttp3包下
不同的包名意味着它们属于完全独立的命名空间,类不会互相冲突或覆盖。你的应用代码可以正常使用OkHttp3的com.squareup.okhttp3.OkHttpClient,而Mintegrate库会自动调用它依赖的OkHttp2版本的com.squareup.okhttp.OkHttpClient,两者互不干扰。
至于你移除OkHttp2.7.5后出现的ClassNotFoundException: Didn't find class com.squareup.okhttp.OkHttpClient错误,原因很直接:Mintegrate库的代码是基于OkHttp2的API编写的,它明确引用了com.squareup.okhttp包下的类,而OkHttp3并没有提供这个包的类,所以当你移除OkHttp2的依赖后,运行时找不到对应的类就会崩溃。
所以正确的依赖配置应该是同时保留两者:
compile 'com.squareup.okhttp3:okhttp:3.9.1' compile 'com.squareup.okhttp:okhttp:2.7.5'
另外补充一点:如果后续Mintegrate官方推出了兼容OkHttp3的版本,你可以考虑替换成那个版本来减少依赖数量,但在那之前,同时保留两个版本是最稳妥的解决方式。
内容的提问来源于stack exchange,提问作者Boycott A.I.
相关产品推荐
相关产品推荐

