Expo安卓USB调试时无法连接本地localhost API该如何解决
问题根本原因
安卓设备上请求127.0.0.1或localhost时,指向的是安卓设备自身的本地回环地址,而非运行API服务的开发电脑。网页模式运行在电脑浏览器中,所以可以正常访问本地服务;USB调试模式下应用运行在安卓设备的独立环境,因此无法连接到电脑的本地服务。
解决方案
方案一:使用电脑局域网IP访问(配置简单,推荐使用)
- 第一步:获取开发电脑的局域网IPv4地址
- Windows系统:打开cmd执行
ipconfig,找到当前使用的WiFi/有线网卡对应的IPv4地址,格式一般为192.168.x.x或10.x.x.x - macOS/Linux系统:终端执行
ifconfig或ip addr,查找当前联网网卡对应的IPv4地址
- Windows系统:打开cmd执行
- 第二步:修改代码中的API地址,将
127.0.0.1替换为上一步查到的电脑IP,示例:
// 替换为你自己的电脑IP const API_ENDPOINT = "http://192.168.3.22:5001/api/Medicines/";
注意:如果你的本地API使用自签名HTTPS证书,安卓默认会拦截不信任的证书请求,开发阶段建议先改用HTTP协议测试,连通后再配置安卓网络安全规则信任自定义证书。
- 第三步:修改Expo启动命令,移除
--localhost参数,改为:
expo start --android
- 第四步:确认Windows防火墙已放行5001端口,或临时关闭防火墙测试连通性。
方案二:adb反向端口映射(无需修改原有API地址)
如果不想改动代码中的localhost地址,可以通过adb反向代理将安卓设备的端口映射到电脑对应端口:
- 确保安卓设备已开启USB调试,且和电脑正常连接
- 终端执行如下命令,将设备的5001端口映射到电脑的5001端口:
adb reverse tcp:5001 tcp:5001
- 此时代码保留
127.0.0.1:5001的地址即可正常访问电脑本地API服务
注意:每次重新插拔USB设备后,都需要重新执行adb reverse命令才会生效。
内容的提问来源于stack exchange,提问作者Moya
相关产品推荐
相关产品推荐

