我试图在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)获取包时必须导致其他错误。
答案 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
中列出的特定版本。)