我正在尝试使用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>