如何修复Flutter编译APK后的ClientException伴SocketException错误
Flutter APK无法解析主机地址,但模拟器运行正常
问题详情
- 原本正常运行的Flutter应用,通过
http.post()调用PHP脚本从MySQL提取数据,近日重新编译APK后启动报错:Error: ClientException with SocketException: Host search failed: 'www.miosito.it (Operating system error: No address associated with the host name, errno= 7), url=https://www.miosito.it/script/prova.php"
- 模拟器中运行完全正常,浏览器直接访问脚本也无异常
- 新建仅返回
OK的简单PHP脚本页面,编译APK后仍触发相同错误 - 已检查
AndroidManifest.xml权限配置,重装Flutter、Android Studio环境后问题依旧
环境配置
- Flutter 稳定通道 3.24.3,运行于Windows 10 [Version 10.0.19045.5011](区域设置it-IT)
- Android SDK 版本35.0.0
- Android Studio 2024.1版本
解决方案尝试
1. 确认网络权限配置
确保AndroidManifest.xml中已添加必要权限,且放置在<application>标签外部:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2. 添加网络安全配置
针对Android 7.0+的网络限制,创建网络安全配置文件:
- 在
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">www.miosito.it</domain> </domain-config> </network-security-config>
- 在
AndroidManifest.xml的<application>标签中引用该配置:
android:networkSecurityConfig="@xml/network_security_config"
3. 排查DNS解析问题
- 在真机浏览器中访问目标URL,确认网络连通性
- 临时将真机DNS切换为公共服务器(如8.8.8.8或1.1.1.1),重新测试APK
- 在Flutter代码中替换域名为主机IP地址,验证是否为DNS解析故障
4. 检查打包与混淆规则
- 使用标准打包命令编译发布版APK:
flutter build apk --release
- 若开启R8混淆,在
android/app/proguard-rules.pro中添加网络相关保留规则(根据使用的HTTP客户端调整):
-keep class okhttp3.** { *; } -keep class retrofit2.** { *; } -keep class com.google.gson.** { *; }
5. 验证SDK版本兼容性
尝试将Android SDK版本降低至34.0.0,重新编译APK测试,排查高版本SDK的兼容性问题
内容的提问来源于stack exchange,提问作者Biagio Prisco
相关产品推荐
相关产品推荐

