Flutter修改Android应用标签后,明文HTTP配置失效报不允许不安全HTTP错误
Flutter 不安全HTTP访问拦截失效问题修复
根因说明
修改android:label后HTTP访问被拦截,本质是Android Manifest合并规则触发了属性覆盖错位:
- 你在
<application>标签上添加的tools:replace = "android:label",是为了解决多模块Manifest合并时的label属性冲突,但这条规则生效后,会让合并器对同标签下其他存在冲突的属性(包括android:usesCleartextTraffic)启动严格校验。 - 此前未加这条replace规则时,合并器默认取你项目中声明的
usesCleartextTraffic="true"作为最终值;一旦加了仅针对label的replace声明,合并器会因为你没有声明对usesCleartextTraffic的覆盖权限,将该属性的优先级切换为上游依赖(Flutter默认安全配置、第三方库自带配置)的取值,最终让Android默认的“禁止访问不安全HTTP”规则重新生效。
解决方式
- 快速修复方案:调整
tools:replace的覆盖范围
把原配置中的tools:replace = "android:label"修改为:tools:replace="android:label,android:usesCleartextTraffic"
明确告知Manifest合并器,这两个属性的最终取值完全以当前Manifest文件的配置为准,不会被上游依赖的配置覆盖。 - 长期稳定方案(推荐):独立配置网络安全规则
这种方式可完全规避Manifest合并逻辑导致的配置意外失效,操作步骤:- 在
android/app/src/main/res/路径下新建xml目录,创建network_security_config.xml文件,写入:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config>- 在
<application>标签上关联该配置:android:networkSecurityConfig="@xml/network_security_config"
- 在
- 验证方法:修改完成后打开Android Studio的
Merged Manifest视图,查看合并后的最终Manifest中网络安全相关属性的取值来源,确认没有被其他模块覆盖为关闭状态即可。
内容的提问来源于stack exchange,提问作者Aabhash Rai
相关产品推荐
相关产品推荐

