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

使用Jetpack Compose中Coil的AsyncImage时如何解决证书错误?

解决Coil AsyncImage在模拟器中SSL握手失败的问题

你遇到的SSLHandshakeException是因为模拟器无法验证目标网站的SSL证书信任链,以下是几个可行的解决方法:

1. 更换高版本Android模拟器镜像

部分旧版本Android(如Android 10及以下)的系统镜像缺少最新的根证书,无法适配现代HTTPS网站的证书验证。建议创建使用Android 11及以上版本系统的模拟器,大部分情况下能直接解决问题。

2. 临时绕过SSL验证(仅测试环境使用)

如果暂时无法更换模拟器,可以为Coil配置忽略SSL验证的OkHttpClient,注意此方法绝对不能用于生产环境,代码示例如下:

@Composable
@Preview
fun AsyncImageTest() {
    // 创建跳过SSL验证的OkHttpClient
    val unsafeOkHttpClient = OkHttpClient.Builder()
        .sslSocketFactory(
            SSLContext.getInstance("TLS").apply {
                init(null, arrayOf<TrustManager>(object : X509TrustManager {
                    override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
                    override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
                    override fun getAcceptedIssuers() = arrayOf<X509Certificate>()
                }), SecureRandom())
            },
            object : X509TrustManager {
                override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
                override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
                override fun getAcceptedIssuers() = arrayOf<X509Certificate>()
            }
        )
        .hostnameVerifier { _, _ -> true }
        .build()

    val imageLoader = ImageLoader.Builder(LocalContext.current)
        .okHttpClient(unsafeOkHttpClient)
        .logger(DebugLogger())
        .build()

    AsyncImage(
        model = ImageRequest.Builder(LocalContext.current)
            .data("https://picsum.photos/1500/1500")
            .build(),
        imageLoader = imageLoader,
        contentDescription = null
    )
}

3. 手动导入根证书到模拟器

  1. 通过浏览器访问https://picsum.photos,查看网站证书详情并导出根证书(保存为.crt格式)
  2. 使用ADB命令将证书推送到模拟器系统目录:
    adb push your-cert-file.crt /system/etc/security/cacerts/
    adb shell chmod 644 /system/etc/security/cacerts/your-cert-file.crt
    
  3. 重启模拟器后重新测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:02:51