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'
- Android 5支持的最高OkHttp版本为3.12.x(4.x及以上版本要求Android 7+),在
强制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
相关产品推荐
相关产品推荐

