Как изменить путь к каталогу пакета JavaScript с ресурсов на внутреннее хранилище в React Native AAR в Android? - PullRequest
0 голосов
/ 31 мая 2018

Мы используем React Native с нашим существующим приложением.

По разным причинам мы загружаем пакет JavaScript с нашего сервера и сохраняем его во внутреннем хранилище.

Теперь нам нужен ReactСобственный AAR для ссылки на наш пакет JavaScript из внутреннего хранилища вместо папки ресурсов .Для этого где-то нам нужно установить путь к каталогу комплекта JavaScript , на который ссылается React Native.

Пожалуйста, дайте мне знать, как этого добиться.Есть ли какое-то свойство, где этот путь может быть установлен?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Я нашел ответ на свой вопрос после небольшого исследования.В Android для запуска приложения реакции нам нужен экземпляр ReactInstanceManager.ReactInstanceManagerBuilder - это класс строителей для ReactInstanceManager.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);
0 голосов
/ 01 июня 2018

На андроиде файл комплекта предоставляется ReactNativeHost.Чтобы предоставить пользовательский файл, вы должны:

  1. Подкласс ReactNativeHost.Собственный шаблон реагирования по умолчанию уже делает это для вас внутри MainApplication (элемент mReactNativeHost является анонимным подклассом)
  2. Переопределение getJSBundleFile с помощью URI вашего файла (во внутренней памяти)
  3. Переопределите getReactNativeHost в MainApplication и верните собственную реализацию хоста.

Пример:

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);
  }
}
...