Flutter应用安卓真机无法连接Node.js+Express后端求助
安卓网络安全限制:安卓9(API 28+)默认禁止明文HTTP请求,若后端使用HTTP协议,物理设备会直接拦截请求,而模拟器调试模式通常会绕过此限制。检查
android/app/src/main/res/xml/network_security_config.xml是否配置了允许明文访问,或直接将后端切换为HTTPS协议。网络权限未正确获取:物理设备需要明确授予网络权限,模拟器可能自动赋予。确认
AndroidManifest.xml中已添加<uses-permission android:name="android.permission.INTERNET"/>,同时检查应用系统权限设置里是否开启了网络访问权限。发布版APK配置错误:调试版和发布版APK的环境配置可能不一致。比如发布版可能混淆了网络请求相关代码,或后端服务器地址配置错误(如用了本地IP而非公网地址)。检查
build.gradle的发布构建配置,以及代码中服务器地址的变量是否正确指向公网后端。后端服务器访问限制:若后端服务器仅允许内网或特定IP段访问,物理设备通过移动网络或外部WiFi访问时会被防火墙/安全组拦截,而模拟器可能和后端处于同一内网环境。检查服务器安全组规则、防火墙设置,确保允许物理设备所在网络的IP访问。
HTTPS证书信任问题:后端使用自签名证书时,安卓物理设备默认会拒绝信任该证书,而模拟器调试模式可能跳过验证。可在网络安全配置中添加信任该自签名证书,或更换为正规CA签发的证书。
网络请求库的发布版异常:使用
http、dio等库时,发布版可能存在超时设置过短、代理配置错误等问题。建议在物理设备的发布版中添加日志(如通过print或日志框架),查看请求是否触发、是否抛出异常信息。
内容的提问来源于stack exchange,提问作者AirAmetyst

