使用来自远程主机

时间:2018-03-10 01:10:00

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

我已经预编译了我的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它是一个不同的故事,我找不到一种方法可以为远程捆绑定义该路径。我找到了ReactNativeHost的文档,并试图设置getJSBundleFile,但它给了我'无法加载文件'http://....js':

https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java

  

返回捆绑文件的自定义路径。这用于案例中   应该从自定义路径加载bundle。默认情况下,它已加载   来自Android资产,来自{@link指定的路径   getBundleAssetName}。例如   “文件://sdcard/myapp_cache/index.android.bundle”

它似乎不适用于远程位置。值得一提的是,我正在Application中创建我的主机,所以我可以在我的应用程序的不同片段中重用它。

如何定义要为Android应用加载的预编译捆绑位置?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

作为对杰伊回答的跟进, 这是一个远程包的工作实现

    ReactInstanceManager.builder()
            .setApplication(getApplication())
            .setCurrentActivity(this).setJSBundleLoader(
                                JSBundleLoader.createCachedBundleFromNetworkLoader(
                                "index.android.bundle",
                                "http://localhost:8081/index.bundle?platform=android&dev=false&hot=false&minify=false"
                                )
                        )

然而,我确实遇到了这个错误:/ TypeError:React.useEffect is not a function 但打包器可以工作并被触发