如何从Android中的网络加载反应本机JS包?

Mic*_*l T 5 android react-native

对于我的Android应用程序,我需要能够在运行时动态更新Bundle并使用我的Assets中预先保存的bundle作为后备.我在官方文档中未能找到任何相关信息.

在本机的iOS版本中,有一种方法可以指定从中加载JS包的URL,但我还没有看到Android的等效选项.这对Android有什么用?

更新 看起来RN团队一直在研究这个功能,并将成为下一个版本的一部分:https: //github.com/facebook/react-native/commit/3a743ef228a14e07c77c5488b080413643ec9c4b

小智 5

1.下载捆绑文件并管理路径。

2.在您的应用程序中新建一个ReactNativeHost:

public String mBundleFilePath = "";
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    protected boolean getUseDeveloperSupport() {
        return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
        return Arrays.asList(new MainReactPackage(), new MyReactPackage());
    }

    @Override
    protected String getJSBundleFile() {
        return mBundleFilePath;
    }
};
Run Code Online (Sandbox Code Playgroud)

3.在启动ReactActivity之前,将ur捆绑文件的路径分配给变量:mBundleFilePath。

public class ReactNativeActivity extends ReactActivity {
    public static void launchSelf(...) {
        MyApplication.getInstance().mBundleFilePath = path;
        COMPONENT_NAME = ...;
        Intent intent = new Intent(activity,ReactNativeActivity.class);
        activity.startActivity(..);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

源代码:

com.facebook.react.ReactNativeHost#createReactInstanceManager
com.facebook.react.ReactInstanceManager.Builder#setJSBundleFile
com.facebook.react.cxxbridge.JSBundleLoader#createFileLoader
Run Code Online (Sandbox Code Playgroud)

...

可以帮助你:)


Fom*_*aut 3

是的,这是可能的。你可以尝试一下Code Push(但是他们的android版本还不稳定),或者了解如何在他们的代码中做到这一点。