You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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+的网络限制,创建网络安全配置文件:

  1. 在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>
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:27:14