一、原理
RN的热更新需要更换本地js文件,根据MainAppliction中new ReactNativeHost下的getJSBundleFile方法,它默认返回index.android.bundle.js的文件路径,我们需要做的就是去替换它。所以它的步骤就是: 判断是否热更新 -> 下载zip包(zip包减少带宽) -> 解压 -> 更新覆盖
@Nullable
@Override
protected String getJSBundleFile() {
// 判断权限
if (!new RuntimePermissions(context).check(Manifest.permission.WRITE_EXTERNAL_STORAGE))
return super.getJSBundleFile();
File file = new File (FilePath.BUNDLE_PATH);
if(file != null && file.exists()) {
return FilePath.BUNDLE_PATH;
} else {
return super.getJSBundleFile();
}
}
二、热更新条件
判断热更新的条件有两个:
- 本地原生版本大于或等于网络请求的原生版本
- 本地热更新版本小于网络请求的热更新版本
这两个条件同时成立则进行热更新下载,第一个条件是为了限制不让原生和热更新同时触发,事实上原生更新是包括热更新的。本地的原生版本可以通过AndroidManifest.xml的andr