关于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的描述如下:
在这里插入图片描述

环境:

retrofit2.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…

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐