如何在Android模拟器中"摇动"设备来调出开发者菜单以调试我的React Native应用程序。

292
我正在开发一款跨平台的React Native移动应用程序。在开发过程中,我正在编写console.log语句。我想在运行Android应用程序时在Chrome中看到这些日志记录语句。根据Facebook的文档,我只需要“摇晃设备”。如何在Android模拟器中执行此操作?
要访问应用程序内的开发人员菜单: 在iOS上,摇晃设备或在模拟器中按下control + ⌘ + z。 在Android上,摇晃设备或按下硬件菜单按钮(适用于较旧的设备和大多数模拟器,例如在genymotion中,您可以按⌘ + m来模拟硬件菜单按钮点击)。

还想补充一点,文档中也提到:“在发布(生产)版本中,开发者菜单是被禁用的。”因此,请确保在尝试打开此菜单时不要运行“发布”版本。 - BU0
14个回答

315
在 Android 模拟器中,按下 macOS 上的 Command + M 或 Linux 和 Windows 上的 Ctrl + M 来操作您的应用程序。

2
很遗憾,在Android模拟器2 beta中,F2不再在Linux上工作。现在怎么办? - Szczepan Hołyszewski
7
@SzczepanHołyszewski 我想补充一下,在Linux中,目前按下Ctrl + M会打开开发者菜单。 - Ozum Safa
大多数计算机中,<kbd>f1</kbd>到<kbd>f12</kbd>键令人困惑且难以按下。 - ericn
3
可能我的提问不会有人回答,因为这个讨论串已经很久了,但是我还是想说一下:这对我来说不起作用。在我的应用程序中,虚拟移动设备不能被识别为摇晃操作。 - Pimv_h
11
CMD + M 只是将 Android Studio 最小化了。如何在模拟器内打开调试菜单? - Stuart

275

在模拟器中运行React Native,
按下ctrl+m(对于Linux,我想Windows应该也是一样的,对于Mac OS X使用+m)或在终端中运行以下内容:

adb shell input keyevent 82

2
对我来说没有立即生效。我需要进入“设置”(“...”)> 设置> 发送键盘快捷键到> 模拟器控件(而不是虚拟设备),然后它才能正常工作。 - Ryan Knell
在Linux上,ctrl + m无法使用。这个adb shell命令可以工作,即使我更喜欢快捷方式...我猜如果找不到其他方法,我可以制作一个启动此命令的快捷方式。 - Laurent
1
要指定设备,请使用adb -s <device id/serial> shell input keyevent 82命令。我在使用模拟器和物理设备时都会用到它。 - william_grisaitis
1
这个答案应该被标记为正确答案,因为它更详细。 - Parham Heidari
这是唯一对我有效的解决方案(使用Windows) - Francis

83

如果你正在使用 Android Studio 2.0 自带的新模拟器,现在菜单键的快捷键是 Cmd+M,就像 Genymotion 一样。

或者,你可以在终端中使用 adb 发送菜单按钮按下事件:

adb shell input keyevent KEYCODE_MENU

此外,请注意,菜单按钮快捷方式并非严格要求,它只是由ReactActivity Java类提供的默认行为(如果使用react-native init创建项目,默认情况下将使用该类)。以下是ReactActivity.javaonKeyUp的相关代码:
if (keyCode == KeyEvent.KEYCODE_MENU) {
  mReactInstanceManager.showDevOptionsDialog();
  return true;
}

如果您正在将React Native添加到现有应用程序中(文档在此),并且没有使用ReactActivity,则需要以类似的方式连接菜单按钮。您还可以通过任何其他机制调用ReactInstanceManager.showDevOptionsDialog。例如,在我正在处理的应用程序中,我添加了一个仅供开发人员使用的操作栏菜单项,以弹出菜单,因为我发现在物理设备上工作时这比摇晃设备更方便。

这在我 mi4i 上的 MIUI 上没有起作用。它只是打开应用程序托盘。有另一个解决方案吗?我真的不想在模拟器上运行它,因为那会使我的电脑变得非常慢。 - Shreyans
似乎MIUI还存在其他问题。在启用通知权限后,我现在可以摇动设备来获取菜单。如果其他人也遇到MIUI的问题,请查看此线程https://github.com/facebook/react-native/issues/2754 - Shreyans
我编辑了我的帖子,并添加了更多关于所有这些内容如何运作的细节,这可能有助于您追踪问题。我想最好的猜测是您没有使用ReactActivity并且没有通过其他方式连接菜单按钮。 - Alan Pierce
感谢您的及时回复 :) 尽管问题出在 MIUI 权限管理器上,它没有让菜单对话框显示。 - Shreyans
1
关于ReactActivity的好提示。看起来那段代码现在已经移动到ReactActivityDelegate.java中了。 - Ryan H.
我认为我已经看过20多个SO答案,只有这一个指出了处理的地方,我在我的(现有应用程序+React Native)应用程序中找到了解决方法。谢谢! - eugene

39

在Linux上,您需要单击模拟器旁边的三个点"...",然后在虚拟传感器中勾选“Move”,尝试快速移动x、y或z坐标。

输入图像描述


7
实际上,那是唯一对我有效的解决方案。 - DsCpp
3
您还可以在窗口中单击设备图形并拖动它。 - brismith
有没有用adb实现这个的想法? - Himansh
只有x方向的“抖动”对我有效。 - yam
在我的Mac OS 12.6和Android Studio 2022.1.1 Patch 2上无法工作。任何轴向的振动都没有弹出React Native开发人员菜单。 - BU0

22
在 Android 模拟器中,使用组合键“Ctrl + m”会打开 React-Native 开发者菜单。这一点并没有在任何文件中列明。我是通过自己猜测和查找而找到这里的。顺便说一下,楼主并没有提到他所用的操作系统。

17

在开发React Native应用时,我们经常与终端打交道。

因此,我在package.json文件的脚本中添加了一个脚本:

"menu": "adb shell input keyevent 82"

然后我运行$ yarn menu命令,就可以在模拟器上显示菜单了。

它将通过ADB向模拟器转发按键码82,虽然并不是最理想的方法,但我喜欢它,觉得值得分享。

enter image description here


不错的解决方法! - Christian Davén
由于模拟器设置现在不可用,这是使用AS的Chipmunk构建的解决方案。 - DBrown

16

我用的是Mac OS,当我按下Command键时,它启用了缩放选项。

  • 打开配置窗口[...]按钮
  • 进入设置选项卡->常规选项卡 -> 发送键盘快捷键到字段
  • 如图所示将值更改为Virtual device

完成后聚焦于模拟器并按下Command + M,开发人员菜单将出现。

模拟器选项 -> 设置 -> 常规


1
我不确定如何进入这些设置?这是在Android Studio中吗?还是在设备上?我正在使用MacOS。我应该在哪里找到它? - Uch
这些设置来自于 Android 模拟器应用程序。请注意,这与从 Android Studio 中启动模拟器非常不同。如果您从 Android Studio 中启动模拟器,则 Android Studio 会使用其自己的垃圾设置包装模拟器,这些设置与这些设置不同。要获取 Ponleu 的截图,请通过终端手动启动模拟器。例如:emulator -avd Pixel_5_API_33_2。您可以使用 emulator -list-avds 查看已配置的模拟器。文档:https://developer.android.com/studio/run/emulator-commandline - BU0

13

如果您想在终端模拟1秒钟的震动,可以使用以下命令:

adb emu sensor set acceleration 100:100:100; sleep 1; adb emu sensor set acceleration 0:0:0

对于Android Studio刺猬,这是唯一对我有效的方法。谢谢分享! - djthoms

11

'Command + M'对于我的OSX系统有效。


4
在Linux系统中,使用ctrl+m键应该可以起作用,但实际上它并没有效果。要解决这个问题,你需要点击 (...)(扩展控件),然后关闭这个窗口。现在你就可以通过ctrl+m打开菜单了。接下来的步骤如下:
1. 点击 (...)(扩展控件)。 2. 关闭扩展控件。 3. 按下ctrl+m键。

对我来说,这个解决方案在Linux上几乎可行。我必须在扩展控件窗口内按下ctrl + m。在关闭它后按下ctrl + m没有任何效果。 - JANO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接