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

Retrofit2:adapter-rxjava2依赖引发证书错误,寻求解决方案

解决Retrofit RxJava2 Adapter与核心库冲突导致的证书错误问题

这问题我之前帮朋友排查过类似的,核心就是Retrofit生态组件版本不匹配搞的鬼!你用的Retrofit核心是2.2.0,但RxJava2 Adapter却用了2.4.0,两个版本差了好几个迭代,内部依赖的OkHttp、Converter等组件版本完全不对齐,直接导致了SSL证书验证的异常。下面给你一步步的解决办法:

1. 统一Retrofit相关组件的版本

Square出品的Retrofit、Converter、Adapter这些库是严格配套更新的,版本必须完全一致,否则很容易出现隐性冲突。你需要把Retrofit核心、Gson Converter和RxJava2 Adapter的版本统一成同一个,比如和你现在用的Adapter版本(2.4.0)对齐:

// 统一Retrofit系列版本为2.4.0
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'

2. 对齐OkHttp版本

Retrofit 2.4.0依赖的OkHttp版本是3.10.0左右,你原来用的3.7.0版本过低,和Adapter依赖的OkHttp版本冲突,这也是证书错误的关键诱因。把OkHttp和Logging Interceptor的版本统一成和Retrofit兼容的3.10.0:

implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'

3. 验证RxJava/RxAndroid兼容性

你当前用的RxJava 2.2.7和RxAndroid 2.1.1是兼容的,这个不用改动。如果后续还有稳定性问题,可以考虑把RxJava升级到2.x分支的最后稳定版2.2.19,兼容性依然没问题。

4. 额外排查:证书错误的其他可能

如果统一版本后还是出现证书问题,那可能是OkHttp的SSL配置有问题,或者服务器证书本身存在缺陷。你可以先开启OkHttp的详细日志,定位具体错误:

// 初始化日志拦截器,开启BODY级别的日志
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

// 构建OkHttpClient时添加日志拦截器
OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .addInterceptor(loggingInterceptor)
    .build();

查看日志里的SSL错误详情,比如是证书链不完整、域名不匹配,还是自签名证书未被信任,再针对性处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:05:31