为什么在包含在我的 Xamarin Android network_security_config.xml 文件的调试覆盖标记中时未检测到 cleartextTrafficPermitted 标记?

Why is cleartextTrafficPermitted tag not detected when enclosed in debug-overrides tag of my Xamarin Android network_security_config.xml file?

我有一个 Xamarin.Forms 应用程序,我可以在明文 (http) 模式下对其进行调试,基于包含一个 network_security_config.xml 文件,如下所示:

<network-security-config>
   <base-config cleartextTrafficPermitted="true" />
</network-security-config>

但是,如果我将 cleartextTrafficPermitted 设置移动到 debug-overrides 标记内,如下所示,我会收到错误消息“不允许到 MYSITE 的明文 HTTP 流量”。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <debug-overrides>
      <base-config cleartextTrafficPermitted="true" />
  </debug-overrides>
</network-security-config>

我的应用程序 运行 处于调试模式。尽管应用程序调试已经在工作并且模式是调试,以防万一我尝试将 debuggable:true 显式添加到我的 AndroidManifest.xml 中的应用程序标记,并且还尝试添加 (Debuggable = true) 作为参数我的主应用程序 class 声明上的 ApplicationAttribute,但无论我如何将应用程序设置为可调试,如果 base-config 标记嵌套在 debug-overrides 标记内,它似乎会被忽略。难道我做错了什么?有没有其他方法允许在调试模式下允许 HTTP 但在发布模式下不允许?

这可能是因为您指的是 Android 的调试模式,而 Xamarin 没有在其调试模式下使用它。

我无法完全证实这一点,但这是我能想到的唯一可能的原因。由于 Xamarin 不在 Android 到 运行 上使用 Java 虚拟机,因此它可能无法使用专用于此虚拟机的调试。

android:usesCleartextTraffic="true"

将此行放在清单文件中的应用程序标记中。

如下更改我的应用程序 class 的 [Application] 属性允许我仅在调试编译期间使用 HTTP:

#if(DEBUG)
    [Application(UsesCleartextTraffic=true)]
#else
    [Application]
#endif