CLEARTEXT communication错误的处理和避免
Android P以后的版本,在尝试进行CLEARTEXT(明文)通信时,会遇到的一种错误。如果你是Android V9以后的版本的开发者,那么你就必须面对这个一个越来越常见的问题:CLEARTEXT communication错误。
说到CLEARTEXT communication错误,它就像是黑暗中的“食人花”。为什么这样说?因为它的存在,犹如暗夜中的小怪兽,突然出现在你所期待的结果之前。你一头撞进了Android操作系统的安全政策,让你的App在试图发送未加密的网络请求时崩溃。
所以怎样才能打败这个小怪兽呢?
首先,我们来了解一下这个小怪兽的“家族”。从Android 9(Pie)开始,为增加用户数据的安全性,默认情况下,操作系统会阻止App通过明文进行网络传输。这个设定可以在App的Manifest文件的application标签下加入 android:usesCleartextTraffic=“true” 参数进行修改,但这样可能会导致应用数据的安全问题。
那要如何选择最好的武器来打败这个小怪兽呢?答案是SSL/TLS。它们是https的基础,可以将你的数据加密,使网络间的传输变得安全。而为了实现这个,你需要将网络连接协议由http改为https,这样一来你将不再遭受CLEARTEXT communication错误的困扰。
具体实现起来,就是将请求的 URL 中的 http 部分替换为 https,例如,http://example.com应改为https://example.com。
然而,黑暗中的怪兽总是有它的兄弟姐妹,当你发现你使用的第三方API无法提供https链接时,你又该如何战斗呢?这时候你需要创建一个Network security configuration文件,然后将允许清文传输的域名加入。具体步骤如下:
步骤1:在res目录下创建一个xml文件夹,并在该文件夹下创建一个network_security_config.xml文件。
步骤2:在network_security_config.xml文件中写入如下内容:
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">不支持https的域名</domain>
</domain-config>
</network-security-config>
步骤3:在AndroidManifest.xml中的application标签中添加如下代码:
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...
</application>
通过以上操作,你就等于是找到了一个光明的路标,将允许CLEARTEXT通信的域名排除在安全检查范围

浙公网安备 33010602011771号