java.net.UnknownServiceException: CLEARTEXT communication to wanandroid.com not permitted by network
错误原因:这个错误是在安卓P系统上当调用远程接口进行网络通信时报的错误。
大白话:由于 Android P(版本27以上) 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。所以如果当前应用的请求是 htttp 请求,而非 https ,这样就会导系统禁止当前应用进行该请求。
专业术语:Android致力于保护用户们的设备和数据安全。我们保证数据安全的方法之一是保护所有进入或离开Android设备的数据在传输中使用传输层安全性(TLS)。正如我们在Android P开发人员预览中所宣布的那样,我们通过阻止针对Android P的应用程序默认允许未加密的连接来进一步改进这些保护。这是我们多年来为更好地保护Android用户而做出的各种更改。为了防止意外的未加密连接,我们android:usesCleartextTraffic在Android Marshmallow中引入了manifest属性。在Android Nougat中,我们通过创建Network Security Config功能扩展了该属性,该功能允许应用程序指示他们不打算在没有加密的情况下发送网络流量。在Android Nougat和Oreo中,我们仍然允许明文连接。
解决方法:共四种
1、如果一定要使用明文通信的话,则可以打开AndroidManifest.xml 文件,在 application 元素中添加:
android:usesCleartextTraffic="true"
备注:
1)为了安全,不建议上面的使用明文的通信方式,不过上面的这种方法可以作为一种临时的通信策略
2)如果声明不使用明文通信,则可以在application元素中添加:
android:usesCleartextTraffic=”false”
此声明指示该应用不使用明文网络通信,并使 Android Marshmallow 的平台网络堆栈禁止该应用中的明文通信。例如,如果您的应用意外尝试通过 HTTP 明文请求登录用户,该请求将被阻止,该用户的身份和密码信息不会泄露到网络上。
2、项目改用https请求;
3、项目的targetSdkVersion改为27以下;
4、在res的xml目录下,新建一个xml文件(名称自定义,如:network_security_config.xml),内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
在manifest清单文件配置application:
<application
android:networkSecurityConfig="@xml/network_security_config"
/>
转载 https://blog.csdn.net/pengyu1801/article/details/87879850 和 https://blog.csdn.net/mysimplelove/article/details/84063571两篇博文,留着只是当做笔记使用,幸运的话,还能解决一些小伙伴的问题