解决java.net.UnknownServiceException: CLEARTEXT communication to v.juhe.cn not per

220 阅读1分钟

问题起因

java.net.UnknownServiceException: CLEARTEXT communication to v.juhe.cn not permitted by network security policy

image.png 在借助OkHttp3对聚合数据平台的某个免费Api发起GET请求时,无法成功响应

原因分析

刚开始时,对相关代码进行DeBug发现代码从var response = client.newCall(request).execute()直接跳转至抛出异常

image.png

然后在浏览器对url进行访问,可以成功呈现数据

image.png 于是查看聚合数据Api后台,同时重新运行Demo发起GET请求,发现后台统计数据未发生变化

于是查看日志发现:java.net.UnknownServiceException: CLEARTEXT communication to v.juhe.cn not permitted by network security policy

解决方法

查找相关资料发现:Google 为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。

因此可以采用以下几种方法进行解决:

方法一:将http请求改为https请求:

方法二:targetSdkVersion降到27以下

方法三:更改网络安全配置

res下新建 network_security_config.xml文件

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

在AndroidMainfest中的application标签中添加此属性

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

方法四:更改AndroidMainfest配置 直接在application标签中添加以下代码

    android:usesCleartextTraffic="true"

参考文献

blog.csdn.net/gengkui9897…