Android9.0 http网络请求异常解决办法
前言
2018年 8 月 7 日,Google正式发布 Android 9.0 正式版系统,并宣布系统版本 Android P 被正式命名为代号“Pie”。
为保证用户数据和设备的安全,针对Android P 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,由于 Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。
因此运行 Android P 系统的应用的请求是 htttp 请求,而非 https,系统就会禁止当前应用进行该请求,而https 不受影响。
在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
解决方法:
-
使用https请求
网站要实现https访问,首选你需要申请一张SSL证书,然后将SSL证书部署到服务器端,开启443端口,就可以实现https访问了。 -
targetSdkVersion版本降到27以下
-
修改AndroidManifest.xml文件
在AndroidManifest.xml的application 中加入一条属性
android:usesCleartextTraffic="true"
android:usesCleartextTraffic 指示应用程序是否打算使用明文网络流量,目标API级别为27或更低的应用程序的默认值为“ true”。面向API级别28或更高级别的应用默认为“ false”。
当属性设置为“ false”时,平台组件将拒绝应用程序使用明文流量的请求,所以将属性改为“true”,这样再使用http协议进行网络请求时系统就不会出现异常了,从系统安全性考虑,最好让服务端将接口的http全部改成https这样既保证了传输安全性,问题也完美解决了。