2

我正在尝试按照指南将现有的 android 应用程序与 React Native 集成。它编译并运行,但是当我启动 React 活动时,它崩溃了:

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

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

值得注意的是,我可以很好地运行教程示例,所以这似乎是关于从我现有的 Android 应用程序中运行 RN 的东西。

我在 react-native 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)获取捆绑包时一定会导致错误。

4

1 回答 1

0

想通了,这是一系列不幸的事件:

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

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

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

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

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

现在我已经到了 ReactInstanceManager 加载并从开发服务器获取包,但又遇到了一个减速带:

错误:需要未知模块“react”。如果您确定该模块存在,请尝试重新启动打包程序或运行“npm install”。

不知道为什么npm install不自动将其拉入,而是手动运行它来修复它:

npm install react@15.1.0

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

于 2016-06-22T22:26:34.963 回答