升级Flutter 3.13.0后Android报SocketException,求解决方案并留用新版本
解决Flutter 3.13.0 Android调试端SocketException(errno=7)问题
以下是针对该问题的实际排查和解决步骤:
检查Android网络权限配置
确认android/app/src/main/AndroidManifest.xml中已添加必要的网络权限:<uses-permission android:name="android.permission.INTERNET"/>若目标域名是HTTPS且使用自定义证书,需在
network_security_config.xml中配置信任该证书;若为HTTP域名,需开启明文流量允许(仅调试环境使用)。排查调试环境代理干扰
- 检查VS Code的
launch.json中是否设置了错误的代理配置,可临时添加"args": ["--no-proxy"]禁用代理调试。 - 若使用Charles、Fiddler等抓包工具,需确保Android模拟器已安装对应的根证书且代理地址配置正确;也可暂时关闭抓包工具,验证异常是否消失。
- 手动强制HttpClient不使用代理,测试是否解决问题:
final client = HttpClient(); client.findProxy = (_) => 'DIRECT'; // 强制直连,跳过代理
- 检查VS Code的
清理构建缓存并重置环境
执行以下命令清理Flutter和Android的构建缓存,避免旧配置干扰:flutter clean cd android && ./gradlew clean flutter pub get同时可尝试新建一个Android模拟器,或重置现有模拟器的网络设置,排除模拟器本身的网络配置问题。
验证intl包兼容性
虽然更新intl包是为了构建流水线,但需确认新版本intl是否与Flutter 3.13存在冲突:- 暂时注释掉intl相关的本地化初始化代码,运行项目看异常是否消失,定位是否为intl包引发的间接网络请求问题。
- 尝试锁定intl包到兼容Flutter 3.13的稳定版本(比如
intl: ^0.18.1),避免使用最新的预发布版本。
排查Flutter 3.13的网络底层变更
Flutter 3.13升级了Android Gradle插件至8.0+,可能对网络请求的底层实现有调整:- 检查
android/build.gradle中的AGP版本是否与Flutter 3.13要求匹配(Flutter 3.13要求AGP 8.0.2+)。 - 确认项目中是否使用了自定义网络框架(如dio),需更新到兼容Flutter 3.13的版本。
- 检查
定位异常触发的具体代码
由于应用能正常运行但抛出未捕获异常,大概率是启动阶段的某个预请求(如本地化资源加载、配置拉取)失败:- 用
try-catch包裹所有初始化阶段的网络请求,打印具体的调用栈,定位抛出异常的代码段。 - 可在VS Code的调试面板中添加异常断点,捕获SocketException时暂停,查看上下文信息。
- 用
内容的提问来源于stack exchange,提问作者nbreetz
相关产品推荐
相关产品推荐

