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

Android 5.0(API 21)调用API时出现UnknownHostException问题求助

Android 5(API 21)设备网络解析错误与图形警告处理

问题拆解

1. 图形方法警告(非功能性问题)

日志中出现的VectorDrawableCompat.updateTintFilter方法警告,是AppCompat库的兼容提示,仅在Android 4.1以下系统会引发实际问题,Android 5设备上属于无害提示,不会影响功能运行。若要消除警告,可升级AppCompat库至最新稳定版本。

2. 核心网络错误:DNS解析失败

日志反复抛出UnknownHostException,无法解析域名f78bc3d7.api.splkmobile.com,这是导致API调用失败的直接原因,以下是针对性排查和解决步骤:

详细解决步骤

  • 确认网络权限配置
    检查AndroidManifest.xml中是否添加了必要权限:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • 验证DNS可用性

    • 切换设备网络(WiFi/移动数据)后重试,排查是否为当前网络的DNS服务故障
    • 手动设置公共DNS(如8.8.8.8、114.114.114.114),测试域名是否能正常解析
  • 升级网络库版本
    当前使用的是系统内置的OkHttp(com.android.okhttp),Android 5内置版本对现代DNS、HTTPS特性支持有限。建议替换为独立的OkHttp库:

    • Android 5支持的最高OkHttp版本为3.12.x(4.x及以上版本要求Android 7+),在build.gradle中添加依赖:
      implementation 'com.squareup.okhttp3:okhttp:3.12.13'
      
  • 强制IPv4解析
    若域名仅配置了IPv6记录,而Android 5设备或当前网络不支持IPv6,可强制OkHttp使用IPv4:

    OkHttpClient client = new OkHttpClient.Builder()
        .dns(hostname -> {
            List<InetAddress> addresses = InetAddress.getAllByName(hostname);
            List<InetAddress> ipv4Addresses = new ArrayList<>();
            for (InetAddress addr : addresses) {
                if (addr instanceof Inet4Address) {
                    ipv4Addresses.add(addr);
                }
            }
            return ipv4Addresses.isEmpty() ? addresses : ipv4Addresses;
        })
        .build();
    
  • 检查Splunk Mint兼容性
    错误由Splunk Mint的NetSender类抛出,确认当前使用的Splunk Mint SDK版本是否兼容Android 5:

    • 尝试升级至SDK的最新兼容版本
    • 临时禁用Splunk Mint的异常上报,验证核心API调用是否正常,排除SDK本身的问题
  • 添加重试机制
    针对DNS解析失败的场景,给网络请求添加重试逻辑,例如使用OkHttp的拦截器:

    public class RetryInterceptor implements Interceptor {
        private static final int MAX_RETRIES = 3;
    
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            IOException lastException = null;
    
            for (int i = 0; i < MAX_RETRIES; i++) {
                try {
                    return chain.proceed(request);
                } catch (UnknownHostException e) {
                    lastException = e;
                    // 等待1秒后重试
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException ignored) {}
                }
            }
            throw lastException;
        }
    }
    
    // 添加到OkHttpClient
    OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(new RetryInterceptor())
        .build();
    

原始错误日志

主日志

Before Android 4.1, method android.graphics.PorterDuffColorFilter androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
2022-10-19 10:23:48.519 4653-4716/com.app E/Mint: NetSender: Transmitting Exception Unable to resolve host "f78bc3d7.api.splkmobile.com": No address associated with hostname
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err: java.net.UnknownHostException: Unable to resolve host "f78bc3d7.api.splkmobile.com": No address associated with hostname
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at java.net.InetAddress.lookupHostByName(InetAddress.java:457)
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at java.net.InetAddress.getAllByName(InetAddress.java:215)
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29)
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232)
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124)
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272)
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
2022-10-19 10:23:48.519 4653-4716/com.app W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:208)
2022-10-19 10:23:48.520 4653-4716/com.app W/System.err:     at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
2022-10-19 10:23:48.520 4653-4716/com.app W/System.err:     at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25)
2022-10-19 10:23:48.520 4653-4716/com.app W/System.err:     at com.splunk.mint.NetSender.sendBlocking(NetSender.java:99)
2022-10-19 10:23:48.520 4653-4716/com.app W/System.err:     at com.splunk.mint.ActionEvent.send(ActionEvent.java:101)
2022-10-19 10:23:48.520 4653-4716/com.app W/System.err:     at com.splunk.mint.Mint$2.run(Mint.java:189)
2022-10-19 10:23:48.520 4653-4716/com.app W/System.err:     at java.lang.Thread.run(Thread.java:818)
2022-10-19 10:23:48.520 4653-4716/com.app W/System.err: Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
2022-10-19 10:23:48.520 4653-4716/com.app W/System.err:     at libcore.io.Posix.android_getaddrinfo(Native Method)
2022-10-19 10:23:48.520 4653-4716/com.app W/System.err:     at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
2022-10-19 10:23:48.520 4653-4716/com.app W/System.err:     at java.net.InetAddress.lookupHostByName(InetAddress.java:438)

额外日志

java.net.UnknownHostException: Unable to resolve host 
"f78bc3d7.api.splkmobile.com": No address associated with hostname
2022-10-20 08:50:16.207 4711-4774/com.ap W/System.err: at 
java.net.InetAddress.lookupHostByName(InetAddress.java:457)
2022-10-20 08:50:16.207 4711-4774/com.ap W/System.err: at 
java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
2022-10-20 08:50:16.207 4711-4774/com.ap W/System.err: at 
java.net.InetAddress.getAllByName(InetAddress.java:215)
2022-10-20 08:50:16.207 4711-4774/com.ap W/System.err: at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29)
2022-10-20 08:50:16.207 4711-4774/com.ap W/System.err: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232)

内容的提问来源于stack exchange,提问作者Om Infowave Developers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:15:49