我已经预编译了我的react-native包并将其上传到我的服务器(假网址):
http://my-bundle-server.com/index.android.bundle.js
对于iOS,我可以使用该位置创建一个视图,它可以正常工作:
jsCodeLocation = "http://my-bundle-server.com/index.android.bundle.js";
RCTRootView *rootView = [[RCTRootView alloc]
initWithBundleURL:jsCodeLocation
moduleName:@"MyCoolComponent"
initialProperties:nil
launchOptions:launchOptions];
使用Android它's a different story, I couldn't找到一种方法我可以为远程包定义该路径 . 我找到了 ReactNativeHost
的文档,并试图设置 getJSBundleFile
,但它给了我'无法加载文件'http://....js':
返回捆绑文件的自定义路径 . 这应用于应从自定义路径加载包的情况 . 默认情况下,它是从{@link getBundleAssetName}指定的路径从Android资产加载的 . 例如“文件://sdcard/myapp_cache/index.android.bundle”
它似乎不适用于远程位置 . 值得一提的是,我正在Application中创建我的主机,所以我可以在我的应用程序的不同片段中重用它 .
如何定义要为Android应用加载的预编译捆绑位置?
1 回答
默认实现似乎使用文件系统实现:
https://github.com/facebook/react-native/blob/4466b6fa7ce5325cac3233a23b10ffcb4ff038a7/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java#L93
但似乎有可能暴露一个可以加载远程URL的捆绑器(否则dev服务器url如何从localhost- rite加载捆绑包?):
https://github.com/facebook/react-native/blob/4466b6fa7ce5325cac3233a23b10ffcb4ff038a7/ReactAndroid/src/main/java/com/facebook/react/bridge/JSBundleLoader.java#L65
以及面向外部的api在这里设置自定义bundleloader:
https://github.com/facebook/react-native/blob/4466b6fa7ce5325cac3233a23b10ffcb4ff038a7/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java#L112
附:我没有尝试过任何上述内容,但似乎可行 .