在 API 29 (Android Q)平台上编译,发现网络请求数据异常,四处Log,找了半天发现是OkHttp在请求网络链接的时候直接onFailure了,莫名其妙,找了半天资料,才发现原来是Android P(API 28)的锅——
Android P全面禁止了非https链接,并严格审查网站的CA证书(详情参考)
但是国内的很多网站都是非https的,怎么办呢?需要使用xml文件设置属性禁用掉这一设置——
在res文件夹下新建目录xml,然后创建文件network_security_config.xml(这个名字可以自定义,旨在开启http请求)
<?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_security_config">
问题解决。
这个方案适用于Android P以上版本其他网络请求http链接失败的情况(比如Volley)

在Android Q(API 29)上,由于系统限制,非HTTPS链接默认被禁止,导致OkHttp请求失败。为了解决这个问题,可以通过在res/xml目录下创建配置文件,然后在AndroidManifest.xml中设置属性来允许HTTP请求。此方法同样适用于其他网络库如Volley。
1301

被折叠的 条评论
为什么被折叠?



