解决新版RN 热更新报错:recreateReactContextInBackground

一、报错描述

React-native 集成 react-native-code-push 报错

java.lang.AssertionError: recreateReactContextInBackground should only be called after the initial createReactContextInBackground call.

在这里插入图片描述

二、原因分析

这是因为你使用了 rn 版本(0.76~到最新的0.79.3),此版本默认启用了TurboModules 新架构,新架构存在 bug:在安卓上无法清除rn内存中的上下文缓存,也就是说不支持实时热更新,除非应用杀死内存重启否则 rn 永远使用旧的不会变。

三、解决方案

1、关闭新架构

修改android 根目录下gradle.properties文件,将此字段置为 false:

newArchEnabled=false

备注:只改动上面配置即可,SoLoader.init(this, OpenSourceMergedSoMapping)不要改

2、启用新架构

只能做到下次启动 app更新

备注:TurboModules新架构决定了此特性,如果你有清理TurboModules 缓存的方法也请同步我下。

需修改代码如下(修改npm源码神器patch-package):

1、CodePush.java这里写死防止回滚

boolean updateIsLoading = pendingUpdate.getBoolean(CodePushConstants.PENDING_UPDATE_IS_LOADING_KEY);
// 如果启用newArchEnabled:此行写死避免代码回滚
updateIsLoading = false;

在这里插入图片描述
2、CodePushNativeModule.java注释掉重新创建上下文方法,防止报错退出 App

instanceManager.recreateReactContextInBackground();

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流星雨在线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值