求助:模拟器中应用无法访问互联网,主机网络正常如何排查
我来帮你一步步排查这个模拟器网络访问的问题,这种情况在开发中挺常见的,咱们从几个关键方向入手:
核心排查步骤
先确认模拟器本身的网络可用性
别先急着看代码,先打开模拟器自带的浏览器,试试访问https://www.baidu.com或者直接输入8.8.8.8。如果浏览器也打不开,那问题根源在模拟器的网络配置,而非你的应用;如果浏览器能正常访问,那问题就聚焦在应用本身的设置上。检查应用的网络权限配置
不同平台的权限要求不一样,别漏了这一步:- 若是Android模拟器:确保
AndroidManifest.xml里添加了<uses-permission android:name="android.permission.INTERNET" />;如果你的应用用了HTTP请求(非HTTPS),Android 9及以上还需要在application标签里加android:usesCleartextTraffic="true",否则系统会默认拦截明文流量。 - 若是iOS模拟器:检查
Info.plist里的NSAppTransportSecurity配置,如果需要允许HTTP请求,得添加对应的例外规则,比如设置NSAllowsArbitraryLoads为YES(不过正式上线不建议这么做,开发阶段可以临时用)。
- 若是Android模拟器:确保
排查模拟器的网络模式与代理
- 模拟器可能继承了主机的代理设置,进入模拟器的「设置-网络」,看看有没有开启代理,如果有,先关掉再测试。
- 对于Android模拟器,还可以用ADB命令重置网络:
或者直接重启Wi-Fi服务:# 开启飞行模式再关闭,强制重新连接 adb shell settings put global airplane_mode_on 1 adb shell am broadcast -a android.intent.action.AIRPLANE_MODE adb shell settings put global airplane_mode_on 0 adb shell am broadcast -a android.intent.action.AIRPLANE_MODEadb shell svc wifi disable adb shell svc wifi enable
检查主机防火墙/安全软件的拦截
主机上的防火墙、杀毒软件可能会把模拟器的网络请求当成未知流量拦截。可以暂时关闭这些软件,再测试应用是否能联网。如果关闭后恢复正常,记得给模拟器程序添加安全软件的例外规则。用抓包工具定位请求细节
用Wireshark或者Charles这类抓包工具,监控模拟器的网络流量,看看你的应用到底有没有发出请求,请求的状态码是什么:- 如果请求根本没发出去,大概率是应用代码的问题(比如网络请求逻辑写错了);
- 如果发出去了但没有响应,可能是网络路由或者模拟器的网络栈出了问题。
注意:用Charles抓HTTPS请求的话,需要在模拟器里配置代理并安装Charles的根证书。
重置或更换模拟器版本
如果以上方法都没用,试试重置模拟器的所有设置(比如Android模拟器的「Wipe Data」选项),或者换一个不同API级别的模拟器镜像。有时候模拟器本身的版本bug也会导致网络异常。
内容的提问来源于stack exchange,提问作者user9119021




