Android 没有 TLS 的 P:network-security-config:cleartextTrafficPermitted 不可能用于 IP(仅域)

Android P without TLS: network-security-config: cleartextTrafficPermitted not possible for IP (only domain)

我正在尝试使用 HTTP 服务器连接到嵌入式设备,该服务器在 android < P 上运行良好(直到我设置 targetSdkVersion 28),因为有一个更改 Network TLS enabled by default.

有一种方法可以 Opt out of cleartext traffic,但似乎这 仅适用于域 不适用于 IP 地址


我尝试在清单中使用 IP 而不是域设置 android:networkSecurityConfig,但这没有用:

<network-security-config>
  <domain-config cleartextTrafficPermitted="false">
    <domain includeSubdomains="true">172.16.33.1</domain>
  </domain-config>
</network-security-config>

将其设置为 <base-config cleartextTrafficPermitted="false"> 也不起作用。


因此,当没有域时,似乎无法使非 TLS 通信正常工作。但是因为这是本地网络中的嵌入式设备,我们没有域(我们只知道 IP)。

这似乎是所有无法再通信的嵌入式设备的主要问题。另外,"new apps and updates to existing apps require to target API level [28 in November 2020]"(从 2018 年 11 月开始 API 26 并且每年都在进步)。

有什么想法可以实现吗?

它正在使用 <base-config cleartextTrafficPermitted="true"> 获取 IP 地址。

(当然也需要true而不是false)。

我知道这个问题已经得到回答和接受,但如果有人需要允许应用程序中的所有明文流量(对于所有 URL),则可以将以下行添加到应用程序标签中:

<application
    ...
    android:usesCleartextTraffic="true">
    ....
</application>

如果你的 minSdkVersion 低于 23,这里引入了这个属性,Android Studio 会告诉你:

Attribute usesCleartextTraffic is only used in API level 23 and higher (current min is ...)

然而,据我所知,“android:usesCleartextTraffic”属性在 23 以下的 SDK 上将被忽略。

如果存在 Android 网络安全配置 ( link)

@hardysim 答案有效,这里是快速示例

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

对我来说,仅仅这个答案是行不通的。我也必须在清单文件中注册此配置,这对于混合开发人员来说是未知的。以下是我的修复。

network_security_config

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">172.16.33.1</domain> <!-- Debug port -->
    <domain includeSubdomains="true">abc.com</domain>
  </domain-config>
</network-security-config>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    <application android:networkSecurityConfig="@xml/network_security_config">
       
    </application>
</manifest>