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

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请求仍能成功执行并收到响应。

疑问

  1. 为何禁止明文流量的配置未生效,HTTP请求仍可执行?
  2. 该问题是否与Flutter或Android 14版本相关?
  3. 还有哪些配置需检查以确保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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:48:25