You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

求助:模拟器中应用无法访问互联网,主机网络正常如何排查

我来帮你一步步排查这个模拟器网络访问的问题,这种情况在开发中挺常见的,咱们从几个关键方向入手:

核心排查步骤
  • 先确认模拟器本身的网络可用性
    别先急着看代码,先打开模拟器自带的浏览器,试试访问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请求,得添加对应的例外规则,比如设置NSAllowsArbitraryLoadsYES(不过正式上线不建议这么做,开发阶段可以临时用)。
  • 排查模拟器的网络模式与代理

    • 模拟器可能继承了主机的代理设置,进入模拟器的「设置-网络」,看看有没有开启代理,如果有,先关掉再测试。
    • 对于Android模拟器,还可以用ADB命令重置网络:
      # 开启飞行模式再关闭,强制重新连接
      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_MODE
      
      或者直接重启Wi-Fi服务:
      adb shell svc wifi disable
      adb shell svc wifi enable
      
  • 检查主机防火墙/安全软件的拦截
    主机上的防火墙、杀毒软件可能会把模拟器的网络请求当成未知流量拦截。可以暂时关闭这些软件,再测试应用是否能联网。如果关闭后恢复正常,记得给模拟器程序添加安全软件的例外规则。

  • 用抓包工具定位请求细节
    用Wireshark或者Charles这类抓包工具,监控模拟器的网络流量,看看你的应用到底有没有发出请求,请求的状态码是什么:

    • 如果请求根本没发出去,大概率是应用代码的问题(比如网络请求逻辑写错了);
    • 如果发出去了但没有响应,可能是网络路由或者模拟器的网络栈出了问题。
      注意:用Charles抓HTTPS请求的话,需要在模拟器里配置代理并安装Charles的根证书。
  • 重置或更换模拟器版本
    如果以上方法都没用,试试重置模拟器的所有设置(比如Android模拟器的「Wipe Data」选项),或者换一个不同API级别的模拟器镜像。有时候模拟器本身的版本bug也会导致网络异常。


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

火山引擎 最新活动