最近最项目遇到个问题,如下:

java.net.UnknownServiceException: CLEARTEXT communication to *** not permitted by network security policy

这玩意已经看过 n 次,一直不知道是什么导致的,今天刚好有空,就一探究竟吧。

在 Google 官网上,官方解释道:

为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输。

需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。因此在Android P 使用HttpUrlConnection进行http请求会出现以下异常。

 W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted

使用OKHttp请求则出现

 java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy

在Android P系统的设备上,如果应用使用的是非加密的明文流量的http网络请求,则会导致该应用无法进行网络请求,https则不会受影响,同样地,如果应用嵌套了webview,webview也只能使用https请求。

总的来说,就是开发Android P系统及以上的App,禁止使用未加密的链接进行网络请求,否则报错。

 

针对这个问题,有以下三种解决方法:

1、APP改用 https 请求

2、targetSdkVersion 降到27以下

3、更改网络安全配置

前面两个方法容易理解和实现,具体说说第三种方法,更改网络安全配置。

    首先,在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:

  <?xml version="1.0" encoding="utf-8"?>
 
             
 

    接着,在AndroidManifest.xml文件下的application标签增加以下属性

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

完成,这个时候App就可以访问网络了。

 

推荐使用第一种方法,直接让服务器支持HTTPS,目前也有很多免费的方式可以实现HTTPS的访问方式,或者使用第二种方式,把targetSdkVersion 降到27以下。

更多相关文章

  1. Android(安卓)GUI系统学习1:Gralloc
  2. 《Android(安卓)系统源代码分析》PDF版电子书下载
  3. android Configuration系统设置 .
  4. 谈谈Android的三种网络通信方式
  5. Android客户端调用Asp.net的WebService
  6. Android(安卓)- Android(安卓)7.0 拍照,相册选择和系统图片裁剪和
  7. 使用BroadcasterRecevier拦截系统短信息_使用service后台获取位
  8. android获取应用信息,判断应用来源,监听应用的安装和卸载
  9. Android(安卓)OkHttp3简介和使用详解

随机推荐

  1. 给TextView添加边框
  2. android seekbar的用法
  3. ViewPager使用样例
  4. android生成缩略图
  5. android TextView 部分文字变色 工具类
  6. Android基础知识学习——界面转换
  7. android耳机广播接收
  8. android 大图片拖拽并缩放实现原理
  9. Android(安卓)IntentService 深入分析
  10. Android(安卓)中的 BACK 和 HOME 按钮的