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

Glide/Coil真机可正常加载图片 模拟器加载失败如何解决?

问题原因
  • SSL证书信任问题:你使用的是AWS S3的HTTPS图片链接,大多数Android模拟器的系统根证书列表预置不全,缺少对应CA证书导致HTTPS握手失败;真机系统证书列表完整,因此可以正常加载。
  • 模拟器网络异常:即使模拟器显示网络连接正常,也可能存在DNS无法解析S3域名、本机代理/VPN未同步到模拟器、代理本身无法访问S3节点的问题。
  • Glide配置缺少容错和日志逻辑:当前加载代码没有添加错误监听,仅有的简略日志无法定位具体失败原因,也没有适配模拟器的特殊网络环境。
解决步骤

第一步 定位问题根因

先在模拟器自带的系统浏览器直接访问测试图片链接,根据结果判断问题范围:

  • 浏览器也无法打开:问题出在模拟器本身的网络/证书配置,和Glide无关
  • 浏览器可以正常打开:问题出在Glide的网络请求配置

第二步 对应解决方案

证书问题解决方案

注意:跳过SSL校验的方案仅可用于测试环境,严禁在线上版本使用

  1. 引入Glide的OkHttp集成依赖,版本和你项目中现有Glide版本保持一致:
implementation "com.github.bumptech.glide:okhttp3-integration:4.12.0"
kapt "com.github.bumptech.glide:compiler:4.12.0"
  1. 自定义Glide模块,配置信任所有证书的OkHttp客户端适配模拟器环境:
@GlideModule
class UnsafeOkHttpGlideModule : AppGlideModule() {
    override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
        val okHttpClient = UnsafeOkHttpClient.getUnsafeOkHttpClient()
        registry.replace(GlideUrl::class.java, InputStream::class.java, OkHttpUrlLoader.Factory(okHttpClient))
    }
}

object UnsafeOkHttpClient {
    fun getUnsafeOkHttpClient(): OkHttpClient {
        return try {
            val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
                override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {}
                override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {}
                override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf()
            })
            val sslContext = SSLContext.getInstance("SSL")
            sslContext.init(null, trustAllCerts, SecureRandom())
            val sslSocketFactory = sslContext.socketFactory
            val builder = OkHttpClient.Builder()
            builder.sslSocketFactory(sslSocketFactory, trustAllCerts[0] as X509TrustManager)
            builder.hostnameVerifier { _, _ -> true }
            builder.build()
        } catch (e: Exception) {
            throw RuntimeException(e)
        }
    }
}
  1. 长期方案:升级到Android Studio官方最新版模拟器,新版模拟器的系统根证书列表和真机同步,无需额外配置即可加载正常的HTTPS资源。

网络问题解决方案

  • 关闭本机所有VPN、代理软件,冷启动模拟器后重试
  • 手动修改模拟器的DNS配置为公共DNS(8.8.8.8 / 114.114.114.114)后重试
  • 关闭模拟器的快速启动快照功能,完全重启模拟器后测试

优化Glide加载逻辑

修改现有BindingAdapter,添加错误监听打印完整失败堆栈,方便定位具体问题:

@BindingAdapter("imageUrl")
fun ImageView.setImageUrl(url: String?) {
    if (url == null) {
        setImageBitmap(null)
        return
    }
    GlideApp.with(this)
        .load(url)
        .listener(object : RequestListener<Drawable> {
            override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
                Log.e("GlideLoadError", "图片加载失败", e)
                return false
            }
            override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
                return false
            }
        })
        .into(this)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:24:02