前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Android P上使用Http

在Android P上使用Http

作者头像
JarvanMo
发布2018-10-15 17:02:14
2K0
发布2018-10-15 17:02:14
举报
文章被收录于专栏:JarvanMo的IT专栏JarvanMo的IT专栏

前言

不少同学在适配Android P的时候会遇到not permitted by network security policy问题:

代码语言:javascript
复制
//使用HttpUrlConnection时遇到的异常
 W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted
//使用OkHttp时遇到的异常
java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy

这是由于我们所使用的接口并非https导致的:

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

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

解决问题

主要方案有三种

  • 使用https
  • target降低至27
  • 允许使用http 第一种方案当然是最好的了,强烈建议使用该方案。第二种方案也可行,但并不是长久之计,和大应用商店会纷纷效仿Google Play对应用target有限制,所以这只是缓兵之计。但现实往往并不能迅速将所有接口替换为https。所以我们可以采取第三种方案。采用第三种方案需要在 res下新增一个 xml 目录,然后创建一个名为:network_security_config.xml 文件(名字自定) ,内容如下:
代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
代码语言:javascript
复制
然后在AndroidManifest.xml文件下的*application*标签增加以下属性:
<application
...
 android:networkSecurityConfig="@xml/network_security_config"
...
    />

参考链接

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.10.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 解决问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档