关于OkHttp、Retrofit、阿里云存储中不兼容Android5.0以下系统的解决方案
参考链接:
1、retrofit:https://square.github.io/retrofit/
2、OkHttp:https://square.github.io/okhttp/
3、阿里云存储:
https://help.aliyun.com/document_detail/32042.html?spm=a2c4g.11186623.6.1444.6bb92baaAAsliR
前言:
在Android5.0以下的手机上运行以OkHttp为底层的框架,会出现崩溃错误,错误如下:
官网上的描述如下:
Retrofit:
OkHttp的描述如下:
环境:
retrofit为2.9.0版本,该版本为编写文档时最新版本
如果兼容5.0以下需要将okHttp修改为3.12.x版本
目的是修改OkHttp版本,不修改Retrofit版本,以免导致大面积改动
注意,由于目前项目大多数都很复杂,所以项目都分了很多模块,不管多少模块,OkHttp都需要统一为3.12.0版本,后面会给出查找方式
处理方式(一):
项目依赖(跟目录build.gradle):
converter_gson : 'com.squareup.retrofit2:converter-gson:2.9.0',
retrofit : 'com.squareup.retrofit2:retrofit:2.9.0',
adapter_rxjava : "com.squareup.retrofit2:adapter-rxjava2:2.9.0",
模块依赖:
api(rootProject.ext.dependencies.converter_gson){
exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}
api(rootProject.ext.dependencies.retrofit){
exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}
api(rootProject.ext.dependencies.adapter_rxjava){
exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}
implementation "com.squareup.okhttp3:okhttp:3.12.0"
处理方式(二):
app模块下的build.gradle最外层配置
configurations {
all*.exclude group: 'com.google.android', module: 'support-v4'
// 或者粗暴点,就没有上面的坑了
all*.exclude module: 'okhttp'
}
configurations.all {
resolutionStrategy {
force "com.squareup.okhttp3:okhttp:3.12.0"
}
}
处理方式优劣之分:
第一种处理方式复杂,但是,假如之前OkHttp的版本比较新,现在要降级,新旧版本的API不一致,这个可以在编译期间指出错误,所以便于修改
第二种处理方式简单,但是会在如果新旧API不一致,会在运行期间报错,不利于修改
如何排查问题:
首先,问题是如果知道是OkHttp的问题,那么就要知道目前都有哪些地方使用了OkHttp:
主要使用以下两个工具:
1、Android Studio自带的依赖树:
通过该文件可以看出项目中都依赖了哪些库,都有哪些版本,但是单纯这样没有办法知道该依赖存在于哪里,这时候需要第二种方案
2、Android Studio的插件Gradle View
虽然Android Studio也自带的有查看依赖分部情况,但是不够清晰直观,所以这里可以借鉴第三方插件Gradle View,可以在插件仓库安装,效果图如下:
over…