React Native 多次执行CodePush后Android端图片资源不显示问题
问题根因
这是react-native-code-push框架的已知路径缓存问题,触发逻辑如下:
- 首次热更新时,CodePush会正确将App静态资源寻址的根路径替换为下载的热更新包目录,因此图片加载正常
- 第二次及后续热更新时,v5.x~v7.x版本的CodePush不会主动清除上一次热更新的路径缓存,导致App仍从已失效的旧热更新目录请求图片资源,自然无法加载
- 清除App缓存后,路径缓存被清空,首次热更新时重新绑定正确路径,因此恢复正常
修复方案
方案1:升级CodePush版本
直接将react-native-code-push升级到v8.2.1及以上稳定版,该版本官方已经修复了路径缓存不更新的bug,是成本最低的解决方案。
方案2:禁用增量更新
如果项目依赖不允许升级CodePush版本,打包热更新包时添加--no-incremental参数强制打全量包,参考命令:appcenter codepush release-react -a <你的应用标识> -d <部署环境> --no-incremental
全量更新会强制替换整个热更新目录,不会残留旧路径缓存。
方案3:主动重置应用上下文
在CodePush更新成功的回调中,强制调用重启方法清空缓存,参考代码:
codePush.sync({ updateDialog: true, installMode: codePush.InstallMode.IMMEDIATE }, (status) => { if (status === codePush.SyncStatus.UPDATE_INSTALLED) { codePush.restartApp(true); } });
验证方法
先打一个带--no-incremental参数的热更新包,连续推送两次更新测试,如果图片可以正常加载,即可确认是增量更新的路径缓存问题。
内容的提问来源于stack exchange,提问作者Jane
相关产品推荐
相关产品推荐

