【问题标题】:Why is cleartextTrafficPermitted tag not detected when enclosed in debug-overrides tag of my Xamarin Android network_security_config.xml file?为什么在我的 Xamarin Android network_security_config.xml 文件的 debug-overrides 标记中未检测到 cleartextTrafficPermitted 标记?
【发布时间】:2021-11-25 03:13:09
【问题描述】:

我有一个 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 中的应用程序标记,并且还尝试在我的 ApplicationAttribute 中添加 (Debuggable = true) 作为参数主应用程序类声明,但无论我如何将应用程序设置为可调试,如果 base-config 标记嵌套在 debug-overrides 标记内,它似乎会被忽略。难道我做错了什么?是否有其他方法允许 HTTP 在调试模式下被允许但在发布模式下不允许?

【问题讨论】:

    标签: android xamarin cleartext


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:
        android:usesCleartextTraffic="true"
        

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

        【讨论】:

        • 谢谢 - 虽然这个答案并没有直接解决我的问题,因为把它放在清单文件中并不能实现我只在调试模式下设置的目标,它很有帮助,因为它让我意识到它是“UsesCleartextTraffic”,而不是“可调试”,我需要尝试在我的 Application 类的 Application 属性中进行设置。这正是我所需要的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多