11

我正在尝试使用 HTTP 服务器连接到嵌入式设备,该服务器在 android < P (直到我设置targetSdkVersion 28)上运行良好,因为默认情况下启用了网络 TLS的更改。

有一种方法可以选择退出明文流量,但似乎这仅适用于域而不适用于IP 地址


我尝试android:networkSecurityConfig在 Manifest 中使用 IP 而不是域设置一个,但这不起作用:

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

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


因此,在没有 domain的情况下,似乎没有办法让非 TLS 通信正常工作。但是因为这是本地网络中的嵌入式设备,所以我们没有域(我们只知道 IP)。

对于所有无法再通信的嵌入式设备来说,这似乎是一个主要问题。此外,“新应用和现有应用的更新需要以 API 级别为目标 [2020 年 11 月为 28]”(从 2018 年 11 月开始,API 26 开始,并且每年都在推进)。

任何想法如何使这成为可能?

4

4 回答 4

19

<base-config cleartextTrafficPermitted="true">适用于 IP 地址。

(当然也必须true不是false)。

于 2018-06-21T08:21:50.207 回答
12

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

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

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

属性 usesCleartextTraffic 仅用于 API 级别 23 及更高级别(当前最小值为 ...)

但是,据我所知,“android:usesCleartextTraffic”属性将在 SDK 低于 23 时被忽略。

如果存在 Android 网络安全配置链接) ,则在 Android 7.0(API 级别 24)及更高版本上忽略此标志

于 2019-07-11T06:30:44.333 回答
1

对我来说,这个答案本身并没有奏效。我也必须在清单文件中注册此配置,这对于混合开发人员来说是未知的。以下是我的修复。

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>
于 2020-10-28T15:04:06.537 回答
0

@hardysim 答案有效,这是一个简单的例子

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true"></base-config>
</network-security-config>
于 2020-02-02T10:37:23.653 回答