不带TLS的Android P:网络安全配置:明文流量允许IP无法实现(仅限域)



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

有一种方法可以选择退出明文流量,但这似乎仅适用于域而不是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(。

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

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

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

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

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

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

如果您的 minSdkVersion 低于 23(引入此属性时(,Android Studio 会告诉你:

属性用途明文流量仅在 API 级别 23 及更高版本中使用 (当前最小值为...

但是,据我所知,"android:usesCleartextTraffic"属性在低于23的SDK上将被忽略。

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

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

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>

安卓清单.xml

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

</application>
</manifest>

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

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

您可以同时配置域和基础:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:tools="http://schemas.android.com/tools">
<base-config
cleartextTrafficPermitted="true"
tools:ignore="InsecureBaseConfiguration" />
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">10.0.2.2</domain>
<domain includeSubdomains="true">127.0.0.1</domain>
</domain-config>
</network-security-config>

在清单中:

<application
...
android:networkSecurityConfig="@xml/network_security_config">
...
</application>

最新更新