Xamarin Android的network_security_config中debug-overrides内cleartextTrafficPermitted不识别怎么办
错误原因
Android 网络安全配置规范明确规定,<debug-overrides> 节点仅可用于配置调试场景下的自定义信任锚(例如自签名调试证书),不支持嵌套 <base-config> 标签,因此你将明文权限配置写在该节点下会被系统直接忽略,导致调试模式下依然拦截HTTP请求。
可行实现方案
下面两种方案都可以实现Debug模式允许明文请求、Release模式默认禁止的需求:
方案1:MSBuild条件引用不同配置文件
这是兼容性最好的方案,无需修改业务逻辑:
- 在Android项目的
Resources/xml目录下新建两个配置文件:
- 调试版配置
network_security_config_debug.xml:
<network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
- 正式版配置
network_security_config_release.xml:
<network-security-config> <base-config cleartextTrafficPermitted="false" /> </network-security-config>
- 卸载Android项目,右键编辑
.csproj项目文件,添加如下条件引用规则:
<ItemGroup Condition=" '$(Configuration)' == 'Debug' "> <AndroidResource Include="Resources\xml\network_security_config_debug.xml"> <Link>Resources\xml\network_security_config.xml</Link> </AndroidResource> </ItemGroup> <ItemGroup Condition=" '$(Configuration)' == 'Release' "> <AndroidResource Include="Resources\xml\network_security_config_release.xml"> <Link>Resources\xml\network_security_config.xml</Link> </AndroidResource> </ItemGroup>
- 删除原有的通用
network_security_config.xml文件,重新加载项目。 - 在
AndroidManifest.xml的application标签中正常引用配置即可:
<application android:networkSecurityConfig="@xml/network_security_config" ...>
编译时会自动根据当前构建模式选择对应的配置文件打包。
方案2:清单文件宏替换
如果不想维护两份配置文件,可以直接通过Xamarin内置的清单宏实现动态控制:
在AndroidManifest.xml的application标签中直接配置usesCleartextTraffic属性:
<application android:usesCleartextTraffic="${if DEBUG}true${else}false${endif}" ...>
无需额外配置网络安全文件,系统会自动根据构建模式切换明文权限。
内容的提问来源于stack exchange,提问作者user756366
相关产品推荐
相关产品推荐

