You need to enable JavaScript to run this app. Android应用随机出现maps.googleapis.com域名解析UnknownHostException崩溃如何处理
优惠活动
大模型
产品
解决方案
定价
更多

Android应用随机出现maps.googleapis.com域名解析UnknownHostException崩溃如何处理

问题说明

Dns.kt是OkHttp第三方网络库的内部类,不属于你的项目代码,所以你在本地项目中搜索不到该文件属于正常情况。

本次崩溃的根因是DNS解析失败:当应用请求maps.googleapis.com相关服务时,系统底层调用DNS查询接口尝试解析该域名的IP地址,返回了EAI_NODATA错误(没有找到和该域名关联的IP地址),OkHttp默认没有捕获该类型异常,最终导致应用直接崩溃。

该崩溃随机出现的常见诱因:

  • 触发崩溃的用户设备处于无网络、弱网络环境,DNS请求超时失败
  • 用户所在区域无法正常访问谷歌服务(例如中国大陆地区用户没有特殊网络配置),运营商直接拦截了该域名的解析请求
  • 用户使用的运营商DNS服务器临时故障、存在DNS污染等问题

解决方案

1. 自定义OkHttp DNS实现,全局捕获解析异常

你可以包装OkHttp默认的DNS实现,主动捕获DNS解析过程中抛出的异常,避免未捕获异常直接导致崩溃,示例代码如下:

class SafeDns : Dns {
    override fun lookup(hostname: String): List<InetAddress> {
        return try {
            Dns.SYSTEM.lookup(hostname)
        } catch (e: UnknownHostException) {
            // 也可以在这里添加降级逻辑,比如用公共DNS二次查询
            emptyList()
        } catch (e: GaiException) {
            emptyList()
        }
    }
}

构造OkHttpClient的时候注入自定义的DNS即可生效:

val okHttpClient = OkHttpClient.Builder()
    .dns(SafeDns())
    // 其他OkHttp配置项
    .build()

2. 增加域名访问的区域适配

如果你的应用有中国大陆地区用户,maps.googleapis.com默认无法访问,建议根据用户区域做适配:

  • 国内用户切换为高德、百度等国内地图服务
  • 检测到用户访问谷歌地图服务失败时,弹出友好提示告知用户当前网络无法使用地图功能,不要直接崩溃

3. 优化网络重试逻辑

可以在DNS解析失败后,增加重试逻辑:

  • 切换公共DNS(阿里云公共DNS、114DNS等)二次解析域名
  • 配置OkHttp的重试次数,针对网络类异常做自动重试

4. 前置网络状态检查

发起地图相关的网络请求前,先检查设备网络是否可用,网络不可用时直接给出提示,不需要发起后续请求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 10:54:03