Bootstrap

android 版的 assets 图集资源,react-native 热更新(android)

react-native 热更新(android)

react-native代码分为android部分,js部分,图片资源文件

其中android部分代码是不支持热更新的,支持更新的只有js代码和图片资源文件

react项目生成app时,所有js文件都被压缩到index.android.bundle文件中,该文件和图片资源都位于assets目录下,app启动时,MainActivity首先加载index.android.bundle,转换为对应的原生试图显示到rootView

所以,react热更新就是在app启动时从服务器下载新的index.android.bundle和图片资源,然后加载新的index.android.bundle文件

更新index.android.bundle

react-native提供了getJSBundleFile()来修改index.android.bundle文件的加载路径,复写该方法,返回本地更新后的index.android.bundle文件路径

0.29及以后版本:在你的MainApplication中增加如下代码:

import cn.reactnative.modules.update.UpdateContext;

public class MainApplication extends Application implements ReactApplication {

public static final String JS_BUNDLE_LOCAL_PATH = Environment.getExternalStorageDirectory().toString() + File.separator + "patches/index.android.bundle";

private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {

@Override

protected String getJSBundleFile() {

File file = new File(JS_BUNDLE_LOCAL_PATH);

if(file != null && file.exists()){

return JS_BUNDLE_LOCAL_PATH;

}else{

return super.getJSBundleFile();

}

}

// ... 其它代码

}

}

0.28及以前版本:在你的MainActivity中增加如下代码:

// ... 其它代码

import cn.reactnative.modules.update.UpdateContext;

public class MainActivity extends ReactActivity {

public static final String JS_BUNDLE_LOCAL_PATH = Environment.getExternalStorageDirectory().toString() + File.separator + "patches/index.android.bundle";

@Override

protected String getJSBundleFile() {

File file = new File(JS_BUNDLE_LOCAL_PATH);

if(file != null && file.exists()){

return JS_BUNDLE_LOCAL_PATH;

}else{

return super.getJSBundleFile();

}

}

// ... 其它代码

}

;