为什么在Xamarin Android network_security_config.xml文件的debug-overrides标记中未检测到cleartextTrafficPermitted标记?

nfg76nw0  于 2022-12-07  发布在  Android
关注(0)|答案(4)|浏览(236)

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

<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>

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

093gszye

093gszye1#

发生这种情况的原因可能是您引用的是Android的调试模式,而Xamarin在其调试模式中不使用它。
我不能完全确认这一点,但这是我能想到的唯一可能的原因。由于Xamarin不使用Android上的Java虚拟机来运行,它可能无法使用针对此虚拟机的调试。

llew8vvj

llew8vvj2#

我建议您使用域特定配置。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!-- default config that does not allow plain text traffic -->
    <base-config cleartextTrafficPermitted="false">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>

    <!-- Specific config for local tests (enable plain text traffic) -->
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </domain-config>

</network-security-config>

debug-overrides标记(如android文档中所述)不采用cleartextTrafficPermitted选项。

but5z9lq

but5z9lq3#

按如下方式更改Application类的[Application]属性,使我只能在调试编译期间使用HTTP:

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

zzwlnbp84#

android:usesCleartextTraffic="true"

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

相关问题