React Native无法找到开发服务器,整合现有的Android应用程序

时间:2016-06-21 17:49:16

标签: android react-native genymotion usb-debugging

我试图在guide之后将现有的Android应用与React Native集成。它编译并运行,但是当我启动React活动时,它会崩溃:

  

引起:java.lang.RuntimeException:无法连接到   开发服务器。

我已经在模拟器(genymotion)和USB连接设备上尝试过。我已经adb reverse tcp:8081 tcp:8081运行并通过adb reverse --list进行了验证,并进一步验证我可以从设备上的浏览器访问http://localhost:8081/index.android.bundle以及我的笔记本电脑(因此包服务器是运行良好,通过npm start)。

值得注意的是,我可以很好地运行教程示例,因此它似乎是从我现有的Android应用程序内部运行RN。

我在反应原生0.27.2。

想法?

更新: 我添加了一些代码来直接从我的一个活动中获取包:

public void pingReactServer() {
    Request request = new Request.Builder()
            .url("http://10.0.3.2:8081/index.android.bundle")
            .build();
    OkHttpClient client = OkHttpClientProvider.getOkHttpClient();
    client.newCall(request).enqueue(
            new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    Log.v(TAG, "React ping failed: " + call);
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    Log.v(TAG, "React ping response: " + response.body().string());
                }
            }
    );
}

这很好用,我收回了包内容。因此,React的http客户端可以看到打包服务器,并且在以正常方式(DevServerHelper)获取包时必须导致其他错误。

1 个答案:

答案 0 :(得分:0)

想出来,这是一系列不幸的事件:

tutorial中的示例代码显示了这一点:

mReactInstanceManager = ReactInstanceManager.builder()
    ...
    .setUseDeveloperSupport(BuildConfig.DEBUG)

BuildConfig.DEBUG实际上定义为false,因此这会禁用开发人员支持(相反,它希望找到js包作为资产)。

在我解决之后,我遇到了另一个涉及Proguard的问题;它删除了所有devsupport类,所以我需要在我的proguard配置中将它们列入白名单,使用:

# Keep developer support classes.
-keep class com.facebook.react.devsupport.** { *; }

现在我已经从ReactInstanceManager加载并从开发服务器获取捆绑包,但是又打了一个speedbump:

  

错误:需要未知模块"做出反应"。如果您确定模块在那里,请尝试重新启动打包器或运行" npm install"。

不确定为什么npm install没有自动将其拉出来,但是手动修复它:

npm install react@15.1.0

(使用node_modules/react-native/package.json中列出的特定版本。)