我最近发现了如何在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的url
和port
请参见connecting-to-the-development-server。
生产
据我所知,您需要先下载包,然后在getJSBundleFile
实例上使用重写方法ReactNativeHost
(根据问题中提供的代码片段创建)
@Override
protected String getJSBundleFile() {
return pathToBundleFileDownloaded; // change this
}
如果预期的用途是用于生产,我建议查看一些提供这种功能的库。CodePush是一个很好的例子,而且是免费的。