Flutter/Android Release 包连不上网AndroidManifest INTERNET 权限排查实录作者FungLeo 适用Flutter / Android现象本地flutter run一切正常可一旦flutter build apkrelease装到真机所有接口全部网络连接失败。前言说实话这个坑我踩得挺丢人的。事情是这样的我本地用flutter run跑得好好的接口一个一个都通心想这项目稳了就打了个 release 包发给测试。结果测试同学回我一句“你这 app 是不是没网啊所有页面都转圈圈。”我当时就懵了。代码一行没动debug 明明好好的怎么一打包就不行了于是我开启了漫长的排查之路——先是怀疑 DNS 解析有问题然后又想是不是 IPv6 的锅再后来甚至开始怀疑是不是哪个三方插件在 release 模式下把网络栈给污染了。各种抓包、换网络、清缓存折腾了大半天最后发现……就特么一行权限的事儿。所以今天我把这个坑写出来希望各位看官别像我一样在一个这么基础的地方浪费大半天。根因debug 清单自带权限release 不自带要搞明白得先说清楚 Flutter 工程在android/app/src/下那三个清单目录。android/app/src/ ├── main/AndroidManifest.xml# 主清单release 只合并它├── debug/AndroidManifest.xml# debug 构建时合并└── profile/AndroidManifest.xml# profile 构建时合并Flutter 官方模板在debug / profile的清单里默认就给咱们写好了这么一行uses-permissionandroid:nameandroid.permission.INTERNET/而src/main的主清单默认是不带这一行的。这就埋下了雷。release 构建的时候系统只合并main这一个清单debug / profile 里那行权限压根不会被带进去。于是最终打出来的包里没有联网权限。Android 系统看到没有INTERNET权限直接就把所有 Dio 请求给拒了表现到界面上就是一片网络连接失败。debug 为什么一直能连因为它借着 debug 清单里那行权限的东风。你以为是你代码写得好其实是对方送的。这就是为什么debug 永远能连、release 全版本都不行而且和你的任何代码改动都没关系。这个坑最恶心的地方就在这它披着网络问题的外衣骗你去翻网络层实际上根子压根不在那。我是怎么一步步排查的既然说到这了我也跟各位看官唠唠我当时那段弯路免得你们再走一遍。先看报错日志。release 模式下 Dart 的异常是不抛红屏的这个后面 A05 会专门讲所以控制台干干净净啥有用的都没有。这就更让人往环境问题上想了。怀疑 DNS / IPv6。换了手机热点、切了 4G、甚至把域名换成 IP 直连结果都一样。基本排除。怀疑三方库。项目里用了好几个网络相关的插件挨个注释掉试还是连不上。这时候其实已经该警惕是不是请求根本没发出去了。最后查清单。随便写了个最小 demo 比对才发现 release 包里压根没有INTERNET权限这个声明。你看绕了一大圈真正的元凶就静静躺在src/main/AndroidManifest.xml里等着我去发现。修复在主清单显式声明办法简单得让人想笑。在android/app/src/main/AndroidManifest.xml的manifest根节点下和其他uses-permission并列把那行补上manifest...!-- 原来的权限 --uses-permissionandroid:nameandroid.permission.INTERNET/!-- 其他已有权限 --/manifest然后老规矩清一下重新打# 清理构建缓存避免旧清单被沿用flutter clean# 重新打 release 包flutter build apk装到真机上接口唰唰就通了。那一刻我心情很复杂——既想骂街又想笑。还有哪些权限也容易踩这个坑其实不止INTERNET一个。凡是你只在 debug 清单里见过、main 清单里没写的权限release 都会丢。常见的几个android.permission.INTERNET—— 联网最基础的必加。android.permission.ACCESS_NETWORK_STATE—— 如果你代码里要判断网络类型WiFi / 移动数据这个也得进main否则 release 下一样歇菜。其他如打电话、定位、存储之类的敏感权限模板默认也不会给你塞进main该声明声明。一句话release 需要的权限一律写进src/main别去指望 debug 清单替你兜底。小结好啦这个坑的故事就讲到这。回头看它就是个清单合并默认行为差异导致的排查盲区debug 清单自带权限、main 清单不带release 只认 main于是联网功能在 release 下凭空消失。最坑的是它伪装成网络问题让你去翻根本没问题的网络层代码。各位看官记住一句话就行遇到只有 release 才出现的联网问题第一反应查清单权限别一上来就怀疑人生。最后如果这篇小文帮你省下了大半天折腾的时间希望看官您用发财的小手点个小赞哈要是你也被这个坑打过脸欢迎在评论区吐槽让更多同学看到少走弯路。谢谢大家本文由 FungLeo 主导Deepseek 优化校阅转发请注明首发地址谢谢大家。