无法连接远程调试器


149

我正在使用React.JS,当我这样做时react-native run-android(插入设备),我看到一个空白页。当我摇动设备并Debug JS Remotely从选项列表中进行选择时,会看到以下屏幕。

在此处输入图片说明

仅供参考:

OS: Ubuntu 16.04
Node version is: v4.6.2
java version "1.8.0_111"
react": "15.4.1
react-native": "0.38.0

1
在Android上,您需要在单独的窗口中运行react-native start以启动服务器。
Aleksandar Popovic

如何更改此内容:compile "com.facebook.react:react-native:+"在编译部分。
撒旦Pandeya

您应该在开发菜单中启用“调试”
UA_

Answers:


280

在我的情况下,问题是仿真器正在请求:

http://10.0.2.2:8081/debugger-ui

代替:

http://localhost:8081/debugger-ui 并且请求失败。

解决此问题的方法:在模拟器上启用远程调试之前,请http://localhost:8081/debugger-ui在chrome中打开。然后启用远程调试,并返回到chrome页面,您应该在其中查看控制台日志。


1
为我工作-thx!您是否找到一种方法将其设置为始终尝试连接到本地主机,以避免必须先打开chrome选项卡?
izikandrw '18

26
您可以在模拟器上进入开发设置(Ctrl + M),然后将调试服务器更改为“ localhost:8081”。
DannyMoshe

最后一段是唯一对我有用的东西。
Pedro Otero

3
谢谢。首先如何将其设置为10.0.2.2?
查理布

3
仿真器向“ localhost”发出的请求将尝试访问仿真器而不是PC上的回送端口(您希望PC进行回送)。为解决此问题,android创建了别名10.0.2.2,以允许您访问PC上运行的服务(请参阅developer.android.com/studio/run/emulator-networking以获取文档参考)。至于为什么请求失败的原因不是很确定,但是似乎这是有记录的react / android问题,请参阅github.com/facebook/react-native/issues/17970
DannyMoshe

181

解决了以下问题:

  • Cmd + M在模拟器屏幕上按
  • Dev settings > Debug server host & port for device
  • localhost:8081
  • 重新运行android应用: react-native run-android

调试器已连接!


对于那些对CMD + M按钮不起作用有问题的人,我在adb所在的外壳中使用了“ ./adb shell输入keyevent 82”来触发它。之后,快捷键开始工作!
杰夫L

先生,是个流血的传说。x
NewbieAid

现在,它只是试图连接到远程调试器……永恒
Fakebounce

44

我解决了adb reverse tcp:8081 tcp:8081,然后reload在手机上解决了。


36

就我而言,选择“ 调试JS远程启动Chrome”,但未与android设备连接。通常,新的Chrome标签/窗口在地址栏中会预先填充调试URL,但是在这种情况下,地址栏为空白。超时时间过后,显示“无法与远程调试器连接”错误消息。我通过以下过程解决了这个问题:

  • adb reverse tcp:8081 tcp:8081
  • 粘贴http://localhost:8081/debugger-ui到我的Chrome浏览器的地址栏中。您应该会看到正常的调试屏幕,但是您的应用仍然无法连接。

那应该解决问题。如果没有,您可能需要执行以下附加步骤:

  • 从您的Android设备关闭并卸载该应用
  • 重新安装应用程序 react-native run-android
  • 在您的应用上启用远程调试。
  • 您的应用现在应该已连接到调试器。

2
汤姆...谢谢你!在此之前,我设置了IP地址(“设备设置”->“调试设备的服务器主机”)xxxx:8081
atreeon

11

我有一个类似的问题使我想到了这个问题。在我的浏览器调试器中,我收到以下错误消息:

通过CORS策略阻止从源“ http://127.0.0.1:8081 ” 访问“ http:// localhost:8081 / index.delta?platform = android&dev = true&minify = false ” 处的抓取:否'Access-Control -Allow-Origin'标头出现在请求的资源上。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。

我花了一段时间才意识到我正在使用127.0.0.1:8081而不是localhost:8081调试器。

要解决此问题,我只需要将Chrome从以下位置更改:

http://127.0.0.1:8081/debugger-ui/

http://localhost:8081/debugger-ui/

1
实际上对我来说是相反的。但实际上,“ localhost”通常等效于127.0.0.1。这取决于将地址设置为localhost的方式。总是要明确
得多

2

确保提供捆绑软件的节点服务器在后台运行。要运行启动服务器,请使用npm startreact-native start在开发过程中保持选项卡打开


1
仍然不起作用。两个终端都没有返回我的错误
2016年

1
您是否正在运行任何代理服务器或代理软件(如charles)...如有,请停止
Chethan N'1

不,我没有运行任何代理服务器
2016年

2

我的情况是,当我点击启用远程JS调试时,它将启动chrome,但无法连接到它。

我尝试运行:

adb reverse tcp:8081 tcp:8081 

,但没有用。

我完全卸载了chrome,然后安装了新的Chrome。而且有效。


1
  1. react-native start --reset-cache 在一个选项卡中,react-native run-android在另一个选项卡
  2. adb reverse tcp:8081 tcp:8081(因此您可以将其添加到脚本中,然后运行yarn run adb-reverse
  3. 如果您使用的是Android,则可以运行adb命令,而不是摇动手机,这是一个很好的技巧

这样就可以运行:

  • adb shell输入keyevent 82菜单选项
  • adb shell输入keyevent 46 46重新加载

1

这里的其他答案对我来说却缺少关键的一步。在AndroidManifest.xml中,我需要添加usesCleartextTraffic:

    <application
      ...
      android:usesCleartextTraffic="true">

但是,除非您希望支持不安全的http请求,否则您可能不希望将其保留在应用程序的生产版本中。

在将其添加到AndroidManifest.xml中之后,我遵循了Tom Aranda的回答,并且模拟器终于能够连接到调试器。


0

我做了@sajib的答案,并使用此脚本重定向端口:

#!/usr/bin/env bash

# packager
adb reverse tcp:8081 tcp:8081
adb -d reverse tcp:8081 tcp:8081
adb -e reverse tcp:8081 tcp:8081

echo "🚧 React Native Packager Redirected 🚧"


0

专家开发人员特别Ribamar Santos提供了所有令人印象深刻的答案,如果您无法正常使用,则必须检查一些更棘手的内容!

就像Airplane mode您的(模拟)电话一样!或者您的network status of EmulatorData status and Voice status on Cellular tab of Emulator configuration)可能被操纵为不表示网络!对于某些仿真需求!

我已经通过这个技巧克服了这个问题!找到这个漏洞真是令人叹为观止!



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.