欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于OkHttp、Retrofit、阿里云存储中不兼容Android5.0以下系统的解决方案

程序员文章站 2022-03-20 21:59:17
...

关于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为底层的框架,会出现崩溃错误,错误如下:

关于OkHttp、Retrofit、阿里云存储中不兼容Android5.0以下系统的解决方案

官网上的描述如下:

Retrofit:
关于OkHttp、Retrofit、阿里云存储中不兼容Android5.0以下系统的解决方案

OkHttp的描述如下:
关于OkHttp、Retrofit、阿里云存储中不兼容Android5.0以下系统的解决方案

环境:

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自带的依赖树:
关于OkHttp、Retrofit、阿里云存储中不兼容Android5.0以下系统的解决方案

通过该文件可以看出项目中都依赖了哪些库,都有哪些版本,但是单纯这样没有办法知道该依赖存在于哪里,这时候需要第二种方案

2、Android Studio的插件Gradle View

​ 虽然Android Studio也自带的有查看依赖分部情况,但是不够清晰直观,所以这里可以借鉴第三方插件Gradle View,可以在插件仓库安装,效果图如下:
关于OkHttp、Retrofit、阿里云存储中不兼容Android5.0以下系统的解决方案

关于OkHttp、Retrofit、阿里云存储中不兼容Android5.0以下系统的解决方案

over…

相关标签: OKhttp 日常bug