Android配置禁止明文流量后HTTP请求仍生效的问题求助
问题:Android明文流量拦截配置未生效,HTTP请求仍可执行
配置信息
AndroidManifest.xml
已添加禁止明文流量的配置:
<application android:usesCleartextTraffic="false" ...> </application>
网络安全配置(network_security_config.xml)
创建并配置如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="false" /> </network-security-config>
API调用(Dio)
调用AWS托管的纯HTTP API(无HTTPS及重定向):
try { AppFileLogger.writeErrorLog("Got response.", "Dashboard", "Calling................................................"); Dio _dio = Dio(); final response = await _dio.get('http://13.*****.232:8080/****'); if (response.statusCode == 200) { AppFileLogger.writeErrorLog("Got response.", "Dashboard", "=====> ${response.data}"); } else { AppFileLogger.writeErrorLog("Got response.", "Dashboard", "=====> ${response.statusCode} - ${response.data}"); } } catch (error) { AppFileLogger.writeErrorLog("Got response.", "Dashboard", "=====> $error"); }
设备信息
- 设备:真实设备Samsung/Motorola(Android 14)
- 最低SDK版本:29
- Flutter版本:3.22.3
- 运行模式:Release模式
核心问题
尽管已配置网络安全策略,且目标API为纯HTTP协议(无SSL证书、无HTTPS重定向),但HTTP请求仍能成功执行并收到响应。
疑问
- 为何禁止明文流量的配置未生效,HTTP请求仍可执行?
- 该问题是否与Flutter或Android 14版本相关?
- 还有哪些配置需检查以确保HTTP请求被拦截?
解答
1. 配置未生效的可能原因
- 网络安全配置未关联Manifest:你创建了
network_security_config.xml但没在AndroidManifest.xml的application标签中添加android:networkSecurityConfig="@xml/network_security_config",这个配置根本不会生效,这是高频遗漏点。 - 目标IP被判定为本地网络:Android 10+对本地网络的明文流量限制有特殊豁免,如果你的API IP被系统识别为局域网(部分AWS私有IP段可能被误判),会允许明文请求。
- Flutter网络栈绕过系统限制:Flutter默认用自身的dart:io网络栈,而非Android原生的HttpURLConnection/OkHttp,Android的网络安全配置无法直接约束这个栈的请求。
2. 与Flutter/Android 14的关联
- Flutter是核心影响因素:Flutter自带的网络栈不受Android系统网络安全规则管控,这是配置失效的最常见原因。只要请求是通过这个栈发起的,
usesCleartextTraffic和网络安全配置就起不到拦截作用。 - Android 14的影响极小:Android 14没有放宽明文流量限制,只是对本地网络的识别逻辑有微调,若API IP未被归为本地网络,这个版本不会导致配置失效。
3. 需要检查的额外配置
- 确认网络安全配置已关联到Manifest:在
application标签中补充配置:android:networkSecurityConfig="@xml/network_security_config" - 强制Flutter使用Android原生网络栈:通过
dio_http_adapter插件让Dio使用OkHttp客户端,这样请求就会受Android系统安全规则约束。 - 排查网络安全配置的例外规则:检查
network_security_config.xml中是否存在domain-config或debug-overrides等节点,这些会覆盖base-config的限制。 - 验证Release APK的实际配置:解压APK查看
AndroidManifest.xml和res/xml/network_security_config.xml的真实内容,确认打包过程中配置未被覆盖或遗漏。 - 检查设备特殊权限:确认应用未被授予“忽略电池优化”等可能绕过系统限制的特殊权限。
内容的提问来源于stack exchange,提问作者Veersivaraman S
相关产品推荐
相关产品推荐

