我最近发现了如何在iOS中的AppDelegate.swift中更改jsBundle URL,以便我可以下载自己的jsBundle并在应用程序启动时使用它:

bundleLocation = URL(string: "http://www.example.com/myJsBundle.js")!

let rootView = RCTRootView(bundleURL: bundleLocation, moduleName: "ReactApp", initialProperties: nil, launchOptions:launchOptions)

self.bridge = rootView?.bridge

self.window = UIWindow(frame: UIScreen.main.bounds)
let rootViewController = UIViewController()

rootViewController.view = rootView

self.window!.rootViewController = rootViewController;
self.window!.makeKeyAndVisible()

return true

当我现在想在Android项目中执行同样的操作时,我打开MainApplication.java文件并看到以下代码:
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.<ReactPackage>asList(
          new MainReactPackage()
      );
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }
}

我现在的问题是,在Android中,在哪里以及如何定义jsBundle的自定义URL?

最佳答案

这取决于预期用途是用于调试还是用于生产:
调试
有关如何切换android的urlport请参见connecting-to-the-development-server
生产
据我所知,您需要先下载包,然后在getJSBundleFile实例上使用重写方法ReactNativeHost(根据问题中提供的代码片段创建)

@Override
protected String getJSBundleFile() {
  return pathToBundleFileDownloaded; // change this
}

如果预期的用途是用于生产,我建议查看一些提供这种功能的库。CodePush是一个很好的例子,而且是免费的。

07-24 09:50