Expo构建APK后无法通过Axios获取API数据的调试求助
调试Expo EAS构建APK的Axios API调用失败问题
1. 排查网络基础问题
- 确认API地址为公网可访问的域名/IP:模拟器可能走本地代理或内网,真机必须能直接访问公网地址
- 检查
app.json的权限配置,确保添加INTERNET权限:{ "expo": { "android": { "permissions": ["INTERNET"] } } } - 切换真机网络(WiFi/移动数据),排除特定网络的访问限制
2. 捕获并查看完整错误信息
在API调用逻辑中添加详细的错误捕获代码,输出所有错误维度:
try { const response = await axios.get('你的API地址'); console.log('API响应:', response.data); } catch (error) { console.log('请求失败详情:', { message: error.message, responseData: error?.response?.data, statusCode: error?.response?.status, requestConfig: error?.config, errorCode: error.code }); }
通过以下方式查看真机日志:
- 连接真机到电脑,运行
adb logcat *:S ReactNative:V ReactNativeJS:V过滤RN相关日志 - 使用Expo Dev Client的远程日志功能,在真机上直接查看实时输出
3. 验证HTTPS证书有效性
- 若API使用HTTPS,检查证书是否为公网受信任的正规证书:模拟器可能忽略证书问题,但真机严格校验
- 测试环境使用自签名证书时,需在
app.json配置Android网络安全策略:
注意:正式环境禁止开启{ "expo": { "android": { "networkSecurityConfig": { "domainConfigs": [ { "domain": "你的API域名", "cleartextTrafficPermitted": true, "trustAnchors": [{"certificates": ["你的证书文件.pem"]}] } ] } } } }cleartextTrafficPermitted,必须使用合法证书
4. 核对环境变量与构建配置
- 确认EAS构建时注入了生产环境API地址,而非模拟器用的本地地址:检查
eas.json的环境变量配置{ "build": { "production": { "env": { "API_URL": "https://生产环境API地址" } } } } - 构建时指定正确的配置文件:运行
eas build --profile production
5. 检查API的CORS设置
- 确认API服务器允许真机所在的域名(或所有域名)发起跨域请求:模拟器可能不受CORS限制,但真机APP会严格校验
- 用Postman在真机上直接测试API地址,确认是否能正常响应
6. 对比开发与构建环境的配置差异
- 检查
app.json/eas.json中网络相关配置在开发版与构建版的差异,确保无遗漏项 - 尝试构建开发版APK(
eas build --profile development),安装到真机后连接Expo DevTools直接调试API调用过程
内容的提问来源于stack exchange,提问作者Dropati Yadav
相关产品推荐
相关产品推荐

