Expo构建的APK安装后抛出“Network request failed”错误的排查求助
Expo构建的APK安装后抛出“Network request failed”错误的排查求助
我正在做一个个人应用,通过运行在Flask上的服务器来控制家里的设备。我已经完成了应用开发,用Expo扫码加载到手机上时一切正常——请求能发送到服务器,所有功能都没问题。但用Expo EAS构建APK安装到手机后,就彻底失效了,只会抛出Network request failed的错误,完全没有其他提示来帮我定位问题。
我猜测可能是Android阻止了HTTP请求,因为我的服务器是架在家里树莓派上的,本来就没打算折腾证书的事。查了一阵子资料后,我修改了app.json(已经去掉了隐私相关内容),但问题还是没解决:
{ "expo": { "name": "", "slug": "", "version": "1.0.0", "orientation": "portrait", "icon": "./assets/icon.png", "userInterfaceStyle": "light", "newArchEnabled": true, "splash": { "image": "./assets/splash-icon.png", "resizeMode": "contain", "backgroundColor": "#000000" }, "ios": { "supportsTablet": true }, "android": { "adaptiveIcon": { "foregroundImage": "./assets/icon.png", "backgroundColor": "#000000" }, "usesCleartextTraffic": true, "package": "", "permissions": ["INTERNET"] }, "web": { "favicon": "./assets/favicon.png" }, "extra": { "eas": { "projectId": "" } } } }
我用HTTP请求快捷方式APP测试过,确认Android应用确实能连上我的服务器,而且Expo测试版里应用能正常工作,说明我没搞错fetch的用法(我没装任何第三方库,用的就是React原生的fetch)。
我到底漏掉了什么?我试过参照相关方案安装了某个库,但那直接搞崩了我的项目——连扫码测试都加载不了,只能构建APK安装,但就算那样还是报错。除了这个app.json,我没改过其他Expo默认文件,只写了自己的业务代码。
另外附上我处理请求的代码:
const togglePlay = async () => { try { const response = await fetch(`${apiUrl}toggle`); const json = await response.json(); handleToast(json); if (json.status) { setIsAnimating((prev) => json.state); } } catch (error) { Toast.show({ type: 'error', text1: 'Error', text2: error.message, }); handleError(error); } };
备注:内容来源于stack exchange,提问作者Efraín




