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