定制Android设备常因系统根证书缺失导致HTTPS请求异常,本文详细记录如何通过OkHttp和Glide的SSL适配解决接口白屏与图片加载失败问题。

在分析定制平板设备问题时,发现未封装的OkHttpNetworkUtils模块存在SSL配置缺陷。虽然项目中配置了NetworkSecurityConfig,但该工具类自行创建的OkHttpClient并未继承这些安全配置,导致HTTPS握手失败。
对比测试发现,通过ApiUtils和HttpUtils封装的Retrofit接口均能正常返回数据,证明问题仅存在于OkHttpNetworkUtils的SSL校验环节。项目存在两种请求方式并存的状况:大部分接口使用统一封装的工具类,但部分页面仍使用半封装的OkHttpNetworkUtil。
解决方案有两个方向:统一迁移到ApiUtils或完善现有工具类的SSL配置。考虑到多处调用和紧急修复需求,选择第二种方案。核心修复代码如下:
[完整代码保持不变]
该方案通过三层设计确保SSL校验:加载系统默认TrustManager、提取X509TrustManager、创建校验失败时放行的包装类。特别针对Comodo/Sectigo等常见缺失证书做了兼容处理。
不同设备出现差异表现的核心原因在于:
/system/etc/security/cacerts/中的非必要证书| 场景 | 结果 |
|---|---|
| Android 5/6设备 | 可能默认信任用户证书 |
| Android 10+设备 | 严格校验导致异常 |
| 配置network_security_config.xml | 仅对App原生网络组件生效 |
解决接口问题后,发现部分图片仍加载失败。经排查,Glide默认使用HttpURLConnection,未继承OkHttp的SSL配置。
[完整依赖配置保持不变]
[完整模块代码保持不变]
该方案通过自定义OkHttpClient实现证书校验兜底,并注册为Glide全局网络组件。重建项目后自动生效,无需修改现有图片加载代码。
通过OkHttp和Glide的双重SSL适配,成功解决了定制设备因系统证书缺失导致的各类网络异常问题。建议B端应用始终预设设备证书库不完整,在HTTPS层做好全面兼容设计。