最近新更新了RN0.59.3,集成codepush之后想测试一下,于是打了release包,打开app之后,热更新报错,先以为是热更新配置有问题,弄了半天没看出来,开始检查gradle配置,发现0.59.3版本,targetsdk升级到了28
原因
Android 9的操作系统,原来在Android 8进一步加强系统安全权限的基础上,Android 又限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉,目前网络访问基本都从原来的http替换为了https也是加强安全性的一种表现。既然知道原因了,那就有相对应的解决方案。
1.在打包时进行声明,不再对http请求进行限制;
2.通知客户将客户端和服务器端的请求统一替换为https;
3.把targetSdkVersion版本降到27以下(Android8.0及以下)。
解决方案
后两点不再赘述,说说第一点是怎么声明配置的吧。
1、在android/app/res目录下新建一个xml目录,在xml目录中新建network_security_config.xml 文件 ,编辑文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
2、在android/app目录下的AndroidManifest.xml文件中application标签内声明文件,如下:
<application android:hardwareAccelerated="true"
android:icon="@mipmap/icon"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"--此行为添加内容
android:supportsRtl="true">
</application>