Android真机请求本地Express服务器遇Axios网络错误,模拟器正常
问题分析与解决方案
核心排查方向:网络权限与Android安全策略
你的情况大概率和Android网络权限以及明文网络限制有关,以下是具体排查步骤:
1. 检查Android网络权限配置
EAS构建的APK默认可能未添加必要的网络权限,需在app.json或app.config.js中补充:
{ "expo": { "android": { "permissions": ["INTERNET", "ACCESS_NETWORK_STATE"] } } }
添加完成后重新构建APK并安装测试。
2. 解决Android 9+的明文网络限制
Android 9(API级别28)及以上系统默认禁止明文HTTP请求,你的后端使用http://协议,会被系统拦截,可通过两种方式解决:
- 方式一:精准配置允许明文的域名(推荐)
在项目中创建android/app/src/main/res/xml/network_security_config.xml文件,内容如下:
随后在<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">192.168.1.44</domain> </domain-config> </network-security-config>app.json中引用该配置:{ "expo": { "android": { "networkSecurityConfig": "./android/app/src/main/res/xml/network_security_config.xml", "usesCleartextTraffic": true } } } - 方式二:全局开启明文许可(仅测试环境使用)
直接在app.json中添加:
注意:该方式不适用于正式环境,正式环境需配置HTTPS协议。{ "expo": { "android": { "usesCleartextTraffic": true } } }
3. 额外排查点
- 确认Android真机与Macbook处于同一WiFi网络,建议给Macbook设置静态IP,避免路由器动态分配导致IP变更。
- 检查Express服务器是否绑定
0.0.0.0而非127.0.0.1,若服务器仅监听本地回环地址,真机无法访问:// 正确监听写法 app.listen(8000, '0.0.0.0', () => { console.log('Server running on http://0.0.0.0:8000'); }); - 在真机浏览器中直接访问
http://192.168.1.44:8000/auth/code,验证是否能正常获取响应,排除App代码层面的问题。
内容的提问来源于stack exchange,提问作者cyanbird
相关产品推荐
相关产品推荐

