如何在Android中的React Native AAR中将JavaScript包目录路径从资产更改为内部存储?

时间:2018-05-31 13:06:34

标签: android react-native react-native-android

我们正在使用现有应用程序使用React Native。

由于各种原因,我们从服务器下载JavaScript包并将其存储在内部存储中。

现在我们希望React Native AAR从内部存储而不是资源文件夹引用我们的JavaScript包。为此,在某处我们需要设置一个JavaScript包目录路径,React Native引用。

请告诉我们如何才能实现这一目标。是否有某种属性可以设置此路径?

2 个答案:

答案 0 :(得分:2)

在android上,捆绑文件由ReactNativeHost提供。 要提供自定义文件,您应该:

  1. 子类ReactNativeHost。默认的响应本机模板已在MainApplication中为您执行此操作(mReactNativeHost成员是匿名子类)
  2. 使用您的文件的URI(在内部存储中)覆盖getJSBundleFile
  3. 覆盖getReactNativeHost中的MainApplication并返回自定义主机实施。
  4. 示例:

    public class MainApplication extends Application implements ReactApplication {
    
      private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
        @Override public boolean getUseDeveloperSupport() {
          return BuildConfig.DEBUG;
        }
    
        @Override protected List<ReactPackage> getPackages() {
          return Arrays.asList(new MainReactPackage());
        }
    
        @Override protected String getJSMainModuleName() {
          return "index";
        }
    
        @Nullable @Override protected String getJSBundleFile() {
          return "uri://to/your/file"; // <----!!
        }
      };
    
      @Override public ReactNativeHost getReactNativeHost() {
        return mReactNativeHost;
      }
    
      @Override public void onCreate() {
        super.onCreate();
        SoLoader.init(this, /* native exopackage */ false);
      }
    }
    

答案 1 :(得分:0)

经过一番研究后,我找到了问题的答案。 在Android中,要启动反应应用程序,我们需要一个ReactInstanceManager的实例。 ReactInstanceManagerBuilderReactInstanceManager的构建器类。 ReactInstanceManagerBuilder具有设置JS包文件路径的方法。 请参阅下面的代码段。

ReactInstanceManagerBuilder builder = ReactInstanceManager.builder();
builder.setJSBundleFile("PATH TO YOUR JSBundleFile"); // ex: "assets://index.android.js" or "/sdcard/main.jsbundle"
.
.//other setter calls
.
mReactInstanceManager = builder.build();
mReactRootView.startReactApplication(mReactInstanceManager, appName, arguments);