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

Android 13下启用私有DNS时WebView Client无法加载URL的问题

WebView启用私有DNS后加载失败(Error -6/ERR_CONNECTION_REFUSED)的排查方向

可能原因及解决方法

  • WebView内核未适配系统私有DNS(DoT)配置
    Android 13的私有DNS基于DNS over TLS(DoT)实现,但自定义WebView默认可能未启用DoT支持,而原生浏览器(如Chrome)已适配系统配置。可以尝试通过反射强制开启WebView的DoT功能(注意:反射依赖WebView内部实现,不同版本可能失效):

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        try {
            Class<?> webViewFactoryClz = Class.forName("android.webkit.WebViewFactory");
            Object provider = webViewFactoryClz.getMethod("getProvider").invoke(null);
            Object chromium = provider.getClass().getMethod("getChromium").invoke(provider);
            chromium.getClass().getMethod("setDNSOverTLS", boolean.class).invoke(chromium, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
  • 网络安全配置限制DNS的TLS连接
    若私有DNS服务器使用非系统信任的证书(如自签名),WebView的网络安全策略会阻止其建立TLS连接。需在res/xml/network_security_config.xml中添加信任配置:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <certificates src="system" />
                <!-- 若私有DNS用自签名证书,添加以下行并放入证书文件到res/raw -->
                <!-- <certificates src="@raw/dns_server_cert" /> -->
            </trust-anchors>
        </base-config>
    </network-security-config>
    

    然后在AndroidManifest.xml的application标签中引用:android:networkSecurityConfig="@xml/network_security_config"

  • WebView DNS缓存或解析策略冲突
    WebView可能存在旧DNS缓存,或使用独立解析逻辑忽略系统私有DNS。可尝试清除缓存并强制使用系统解析:

    WebSettings webSettings = webView.getSettings();
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    webView.clearCache(true);
    

    同时检查应用是否有自定义DNS解析逻辑,若有需确保其使用系统私有DNS配置。

  • WebView版本过低
    旧版本Android System WebView可能未适配Android 13的私有DNS特性,需引导用户更新WebView应用(可在Google Play搜索Android System WebView)。

  • 代理/网络配置干扰
    若应用设置了全局代理,可能导致WebView请求未走系统私有DNS。可尝试清除WebView的代理设置:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        android.webkit.ProxyController.getInstance().clearProxyOverride();
    } else {
        webView.getSettings().setProxyOverride(null);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:15:17