如何从MacOS宿主机访问Android模拟器中运行的本地HTTP Web服务
问题解决步骤
- 首先明确iOS和Android模拟器的网络栈差异:iOS模拟器直接共享宿主机网络栈,所以启动的服务宿主机可以直接访问;Android模拟器是独立的隔离网络栈,默认和宿主机之间没有端口映射,这是你iOS正常、Android无法访问的核心原因。
- 配置adb端口转发,将宿主机1313端口的请求转发到模拟器内部的1313端口,在Mac终端执行如下命令:
adb forward tcp:1313 tcp:1313
如果同时连接了多个模拟器/真机,可以先执行adb devices获取目标模拟器的序列号,再指定设备执行转发:
adb -s 目标设备序列号 forward tcp:1313 tcp:1313
- 确认服务监听配置:你现有Golang代码中
fasthttp.ListenAndServe(":1313", middleware.Handle(router.Handler))的写法是正确的,会监听模拟器所有网络接口,无需修改。如果之前写的是127.0.0.1:1313才会限制仅模拟器本地可访问。 - 额外验证项:
- 你现有的AndroidManifest.xml已经配置了
INTERNET权限,满足网络访问要求 - 如果你后续需要使用域名访问服务,Android 9及以上系统默认禁止明文HTTP流量,可在
<application>节点添加android:usesCleartextTraffic="true"配置解除限制 - 配置完成后可以先在宿主机终端执行
curl http://127.0.0.1:1313验证连通性,再使用Postman发起请求,排除工具配置问题。
- 你现有的AndroidManifest.xml已经配置了
- 如果需要取消端口转发,可执行:
# 取消单个端口转发 adb forward --remove tcp:1313 # 清除所有端口转发规则 adb forward --remove-all
内容的提问来源于stack exchange,提问作者roman Sztergbaum
相关产品推荐
相关产品推荐

