这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战
升级android 10 后发现项目的Http请求竟然失败了,经过查阅资料,发现在android9.0以上由于安全性高了,,所有应用都使用HTTPS,OkHttp3 做了检查,所以如果使用了明文流量,默认情况下,在 Android 9.0 版本 OkHttp3 就抛出异常: CLEARTEXT communication to " + host + " not permitted by network security policy
,如果想要使用http请求的,有以下3种解决方法:
1、降级targetSdkVersion的版本未27以下,但是这会导致你的设备又无法运行在android 10 上了,因此相当于没说。
2、在manifest.xml文件的application标签下添加android:usesCleartextTraffic="true"
,它的作用是指示应用程序是否打算使用明文网络流量,例如明文HTTP,并忽略掉Https证书。
android:usesCleartextTraffic 指示应用程序是否打算使用明文网络流量,例如明文HTTP。目标API级别为27或更低的应用程序的默认值为“ true”。面向API级别28或更高级别的应用默认为“ false”。当属性设置为“ false”时,平台组件将拒绝应用程序使用明文流量的请求。避免明文通信的主要原因是缺乏机密性,真实性和防篡改保护;网络攻击者可以窃听所传输的数据,并且还可以对其进行修改而不会被检测到。
还需要注意一点的是,如果没有android:usesCleartextTraffic="true"
,GooglePlay是不允许上架APK的。
3、在res/xml文件夹下创建network_security_config.xml
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="https://juejin.cn/post/system" />
</trust-anchors>
</base-config>
</network-security-config>
复制代码
然后在Application标签下新增属性:android:networkSecurityConfig="@xml/network_security_config"