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

时间:2015-11-04 00:44:56

标签: android react-native

对于我的Android应用程序,我需要能够在运行时动态更新Bundle并使用我的Assets中预先保存的bundle作为后退。我未能在Official Documentation.

中找到有关此内容的任何信息

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

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

2 个答案:

答案 0 :(得分: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;
    }
};

3.在启动ReactActivity之前,将ur bundle文件的路径分配给变量: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(..);
    }
    ...
}

源代码:

com.facebook.react.ReactNativeHost#createReactInstanceManager
com.facebook.react.ReactInstanceManager.Builder#setJSBundleFile
com.facebook.react.cxxbridge.JSBundleLoader#createFileLoader

...

它可以帮助你:)

答案 1 :(得分:3)

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