如何在Android模拟器中“摇动” Android设备以调出开发菜单来调试我的React Native应用


201

我正在开发一个跨平台的React Native移动应用程序。我在开发时正在编写console.log语句。我想在默认的Android模拟器中运行Android应用时在Chrome中看到这些日志记录语句。根据Facebook的文档,我只需要“摇动设备”即可。如何在Android模拟器中执行此操作?

要访问应用内开发者菜单:

在iOS上,摇动设备或在模拟器中按Control +⌘+ z。在Android上,摇动设备或按硬件菜单按钮(在较旧的>设备和大多数仿真器中可用,例如在genymotion中,您可以按⌘+ m来>单击模拟硬件菜单按钮)

Answers:


220

在Android Emulator中的应用程序中,按Command + MOSX或Ctrl + MLinux和Windows。


2
遗憾的是,F2不再在Android Emulator 2 beta中的Linux上运行。现在怎么办?
SzczepanHołyszewski'16

7
@SzczepanHołyszewski我想补充一点,目前在linux中,ctrl + m调出开发人员菜单
Ozum Safa

<kbd> f1 </ kbd>,... <kbd> f12 </ kbd>令人困惑,很难在大多数计算机中按
ericn

223

随着在模拟器阵营本地运行,
ctrl+ m(对于Linux,我想这是针对Windows相同,+ m适用于Mac OS X)或运行在终端如下:

adb shell input keyevent 82

2
不能立即为我工作。我需要进入“设置”(“ ...”)>设置>将键盘快捷方式发送到>模拟器控件(不是虚拟设备),然后它才能工作。
Ryan Knell

ctrl + m在Linux上不起作用。即使我希望使用快捷方式,此adb shell命令也可以工作。...如果我找不到其他方法,可以猜出我可以启动该命令的人
Laurent

要指定设备,请执行以下操作adb -s <device id/serial> shell input keyevent 82。当同时使用仿真器和物理设备时,会使用此功能。
grisaitis

79

如果您使用的是Android Studio 2.0随附的新模拟器,则菜单键的键盘快捷键现在为Cmd + M,就像Genymotion中一样。

另外,您也可以始终adb在终端中使用发送菜单按钮按下:

adb shell input keyevent KEYCODE_MENU

还要注意,菜单按钮快捷方式不是严格的要求,它只是ReactActivityJava类提供的默认行为(如果使用创建了项目,则默认使用该行为react-native init)。这是来自onKeyUp中的相关代码ReactActivity.java

if (keyCode == KeyEvent.KEYCODE_MENU) {
  mReactInstanceManager.showDevOptionsDialog();
  return true;
}

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


这在我的mi4i上的MIUI上不起作用。它只是调出应用程序托盘。还有其他解决方案吗?我真的不想在仿真器上运行它,因为这会减慢笔记本电脑的运行速度
Shreyans

看来还有其他针对miui的问题。启用通知权限后,我现在可以摇动设备以获取菜单。检查此线程,以防其他人遇到MIUI问题github.com/facebook/react-native/issues/2754
Shreyans

我编辑了我的文章,以添加有关所有这些东西如何工作的更多详细信息,这可以帮助您找到问题所在。我最好的猜测是您没有使用ReactActivity,也没有通过其他方式连接菜单按钮。
艾伦·皮尔斯

感谢您的迅速响应:)尽管问题出在MIUI权限管理器中,但该管理器没有显示菜单对话框。
Shreyans '16

1
关于ReactActivity的不错的技巧。似乎该代码现在已移至ReactActivityDelegate.java
Ryan H.

20

“ Ctrl + m”在Windows仿真器中适用于Windows,以调出React-Native开发人员菜单。

在任何地方都找不到该文件。在这里找到了自己的路,其余的都猜出来了……悲痛。

顺便说一句:OP:您没有提到您所使用的操作系统。




8

我在Mac OS上,因此当我按Command时,它将启用缩放选项。这是我的解决方案

  • 打开配置窗口[...]按钮
  • 转到Settings标签-> General标签-> Send keyboard shortcuts to字段
  • 将值更改Virtual device"为如图所示

在专注于仿真器并按Command + M之后,将显示dev菜单。

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


4

command + m(cmd + M)在MAC上使用。另外,make sure that you are accessing your application while you try to access the Debug Menu即您的应用程序必须正在运行,否则Cmd + M只会返回通常的普通电话菜单。


4

在开发反应本机应用程序时,我们在终端上玩了很多

所以我在package.json文件的脚本中添加了一个脚本

“ menu”:“ adb shell输入keyevent 82”

然后我打了$纱线菜单

为了使菜单出现在仿真器上,它将通过非最佳方式通过ADB将键码82转发给仿真器,但我喜欢它并感到可以共享。

在此处输入图片说明


2

在linux上ctrl + m应该可以工作,但是不能解决问题,请单击(...)(其扩展控件),然后关闭该窗口。现在您可以按ctrl + m打开菜单。然后:

  1. 单击(...)(其扩展控件)

  2. 关闭扩展控件

  3. Ctrl + m


1

它可能不是直接的解决方案,但是在开发模式下,我创建了一个lib,允许您使用三指触摸而不是摇动来打开开发菜单

https://github.com/pie6k/react-native-dev-menu-on-touch

您只需要将应用程序包装在其中:

从'react-native-dev-menu-on-touch'导入DevMenuOnTouch; //或:从'react-native-dev-menu-on-touch'导入{DevMenuOnTouch}

class YourRootApp extends Component {
  render() {
    return (
      <DevMenuOnTouch>
        <YourApp />
      </DevMenuOnTouch>
    );
  }
}

当您必须在真实设备上进行调试并且有同事坐在您旁边时,这非常有用。


1

我试图在发行通过构建adb install -r -d <app-release>.apk🤦

确保您正在运行调试版本,然后菜单将通过快捷方式或CLI起作用。


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.