前言
在开发老项目过程中,在Android9.0的手机上报了一个CLEARTEXT communication to * not permitted by network的错误,检查其他非9.0手机无问题,该手机前一天也无问题,手机也未有过升级等情况,那么问题出在哪里了呢?好吧,是因为我修改了项目的targetSdkVersion到28了,Android P系统限制了明文流量的网络请求,并且测试服务一直使用的http协议,okhttp3这就会抛出该异常,在项目targetSdkVersion是28以下的时候,当然不需要支持9.0的特性,就像你的targetSdkVersion低于23的时候不需要添加运行时权限,所以修改targetSdkVersion之前运行在9.0手机上也没问题
三种解决方法
第一种
首先在res目录下新建xml文件夹,文件夹里面创建network_security_config.xml 文件
编辑network_security_config.xml文件,在文件中设置cleartextTrafficPermitted为true
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
然后在 AndroidManifest.xml 的application 标签加上
<application
****
android:networkSecurityConfig="@xml/network_config"
****
>
</application>
第二种
服务器接口都采用https协议
第三种(不推荐)
targetSdkVersion设置为小于28的某一个版本