You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Android API21以下OkHttp/Retrofit的崩溃问题

解决OkHttp在Android API Level 21以下崩溃的问题

嘿,这个问题我之前帮同事排查过,原因其实很直白:你用的OkHttp版本太高了,已经不支持API21以下的Android系统了。

从OkHttp 3.13版本开始,官方就把最低兼容的Android API版本提升到了21,而你当前使用的是3.14.x版本,所以在API19这类低版本设备上初始化OkHttpClient时,就会触发那个Expected Android API level 21+ but was 19的异常,直接导致启动崩溃。

下面给你两个可行的解决方案,优先推荐第一个,简单又靠谱:

方案1:降级OkHttp到支持低版本的稳定版

OkHttp 3.12.x系列是最后一批支持Android API 16+的版本,而且是稳定维护到最后的低兼容版本(最新版是3.12.13)。你只需要修改Gradle依赖,把OkHttp和对应的日志拦截器都替换成这个版本:

dependencies {
    // 替换原有的OkHttp相关依赖
    implementation 'com.squareup.okhttp3:okhttp:3.12.13'
    implementation "com.squareup.okhttp3:logging-interceptor:3.12.13"
    // 其他依赖保持不变即可
}

这个版本完全适配你的API19设备,同时和Retrofit、RxJava2的配合也没有任何问题,不会影响你现有接口的逻辑。

方案2:启用Core Library Desugaring(不推荐,复杂度高)

如果你实在不想降级OkHttp,可以尝试启用Android的Core Library Desugaring功能,让低版本系统支持高版本的Java API,但这个配置比较繁琐,而且不一定能完全解决OkHttp底层的SSL API兼容性问题:

  1. 先在项目根目录的build.gradle中添加desugar的构建依赖:
buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.0+' // 需要使用较新的Gradle版本
        classpath 'com.android.tools.build:desugar_jdk_libs:2.0.4'
    }
}
  1. 然后在app模块的build.gradle中启用desugaring并添加依赖:
android {
    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    coreLibraryDesugaring 'com.android.tools.build:desugar_jdk_libs:2.0.4'
}

不过还是要提醒你,这种方法可能会引入其他未知的兼容性问题,所以除非你有必须使用高版本OkHttp的理由,否则优先选方案1。

另外确认一下:你用到的Retrofit 2.x最低支持API14,RxJava2最低支持API16,都能兼容API19,所以降级OkHttp后不会有依赖冲突的问题。

内容的提问来源于stack exchange,提问作者Jake warton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:38:51