如何在 Android 模拟器中“摇动”Android 设备以调出开发菜单来调试我的 React Native 应用程序
Posted
技术标签:
【中文标题】如何在 Android 模拟器中“摇动”Android 设备以调出开发菜单来调试我的 React Native 应用程序【英文标题】:How do I "shake" an Android device within the Android emulator to bring up the dev menu to debug my React Native app 【发布时间】:2015-12-31 02:33:19 【问题描述】:我正在开发一个跨平台的 React Native 移动应用程序。我在开发时正在编写 console.log 语句。当我在默认的 android 模拟器中运行 Android 应用程序时,我想在 Chrome 中查看这些日志记录语句。根据Facebook's docs 我只需要“摇动设备”。如何在 Android 模拟器中执行此操作?
访问应用内开发者菜单:
在 ios 上摇动设备或在模拟器中按 control + ⌘ + z。 在 Android 上摇动设备或按硬件菜单按钮(在较旧的 >设备和大多数模拟器中可用,例如在 genymotion 中,您可以按 ⌘ + m 来 > 模拟硬件菜单按钮单击)
【问题讨论】:
【参考方案1】:在 Android 模拟器的应用程序中,在 macOS 上按 Command + M 或在 Linux 上按 Ctrl + M和窗户。
【讨论】:
遗憾的是,F2 不再适用于 Android Emulator 2 beta 中的 Linux。现在呢? @SzczepanHołyszewski 我想补充一点,目前在 linux 中, ctrl + m 会调出开发者菜单 f1, ... f12 在大多数计算机中令人困惑且难以按下 我可能不会得到任何答案,因为这个线程已经很老了,但我还是会说;这对我不起作用。在我的应用程序中,虚拟移动设备不会被识别为晃动【参考方案2】:如果您使用的是 Android Studio 2.0 附带的新模拟器,菜单键的键盘快捷键现在是 Cmd+M,就像在 Genymotion 中一样。
或者,您始终可以在终端中使用adb
发送菜单按钮按下:
adb shell input keyevent KEYCODE_MENU
另请注意,菜单按钮快捷方式不是严格要求,它只是ReactActivity
Java 类提供的默认行为(如果您使用react-native init
创建项目,则默认使用该行为)。以下是来自onKeyUp
in ReactActivity.java
的相关代码:
if (keyCode == KeyEvent.KEYCODE_MENU)
mReactInstanceManager.showDevOptionsDialog();
return true;
如果您将 React Native 添加到现有应用程序 (documentation here) 并且您没有使用 ReactActivity
,则需要以类似的方式连接菜单按钮。您也可以通过任何其他机制调用ReactInstanceManager.showDevOptionsDialog
。例如,在我正在开发的应用程序中,我添加了一个仅用于显示菜单的开发人员操作栏菜单项,因为我发现这比在物理设备上工作时摇晃设备更方便。
【讨论】:
这不适用于我的 mi4i 上的 MIUI。它只是调出应用程序托盘。还有其他解决方案吗?我真的不想在模拟器上运行它,因为这会减慢笔记本电脑的运行速度 似乎还有其他特定于 miui 的问题。启用通知权限后,我现在可以摇动设备以获取菜单。检查此线程以防其他人遇到 MIUI 问题github.com/facebook/react-native/issues/2754 我编辑了我的帖子以添加有关所有这些东西如何工作的更多详细信息,这可能有助于您找出问题所在。我最好的猜测是你没有使用ReactActivity
并且没有通过其他方式连接菜单按钮。
感谢您的及时回复 :) 虽然问题出在 MIUI 权限管理器上,它没有让菜单对话框显示。
关于 ReactActivity 的好提示。似乎该代码现在已移至 ReactActivityDelegate.java【参考方案3】:
在模拟器中运行 React Native, 按 ctrl+m (对于 Linux,我想对于 Windows 和 ⌘+m 对于 Mac OS 相同X) 或在终端中运行以下命令:
adb shell input keyevent 82
【讨论】:
不能立即为我工作。我需要进入“设置”(“...”)>设置>发送键盘快捷方式到>模拟器控件(不是虚拟设备)然后它工作。 ctrl + m 在 linux 上不起作用。即使我更喜欢快捷方式,这个 adb shell 命令也可以工作......如果我没有找到任何其他方式,我猜我可以制作一个启动这个命令 要指定设备,请执行adb -s <device id/serial> shell input keyevent 82
。我在同时使用模拟器和物理设备时使用它。
这个答案应该标记为正确答案,因为它更详细【参考方案4】:
'Ctrl + m' 适用于 Windows 在 Android 模拟器中调出 React-Native 开发者菜单。
在任何地方都找不到记录。 在这里找到了我的路,其余的都猜到了……天哪。
顺便说一句:OP:你没有提到你使用的是什么操作系统。
【讨论】:
【参考方案5】:OSX 的“Command + M”对我有用。
【讨论】:
【参考方案6】:在 linux 上 ctrl+m 应该可以工作,但它不能解决问题单击 (...)(它的扩展控件)然后关闭该窗口。现在您可以通过 ctrl+m 打开菜单。那么:
单击 (...)(其扩展控件)
关闭扩展控件
ctrl+m
【讨论】:
【参考方案7】:在 MAC 上使用command + m(cmd + M)
。还有make sure that you are accessing your application while you try to access the Debug Menu
i.e.您的应用程序必须正在运行,否则Cmd + M
只会返回通常的普通电话菜单。
【讨论】:
【参考方案8】:对于 Linux,您单击模拟器旁边的三个点“...”,在虚拟传感器上选中“移动”,然后尝试快速移动 x、y 或 z 坐标。
【讨论】:
实际上,这是唯一对我有用的解决方案。 您也可以在显示的窗口中单击设备图形并拖动它。 知道如何使用 adb 做到这一点吗? 只有 x 方向的“摇晃”对我有用。【参考方案9】:我在 Mac OS 上,所以当我按下 Command 时,它会启用缩放选项。 这是我的解决方案
打开配置窗口 [...] 按钮 转到Settings
标签->General
标签->Send keyboard shortcuts to
字段
如图将值改为Virtual device"
聚焦模拟器并按下 Command + M 后,将出现开发菜单。
【讨论】:
【参考方案10】:这可能不是直接的解决方案,但我创建了一个库,允许您在开发模式下使用 3 指触摸而不是摇晃来打开开发菜单
https://github.com/pie6k/react-native-dev-menu-on-touch
您只需将您的应用包装在里面:
从 'react-native-dev-menu-on-touch' 导入 DevMenuOnTouch; // or: import DevMenuOnTouch from 'react-native-dev-menu-on-touch'
class YourRootApp extends Component
render()
return (
<DevMenuOnTouch>
<YourApp />
</DevMenuOnTouch>
);
当您必须在真实设备上进行调试并且有同事坐在您旁边时,它非常有用。
【讨论】:
是的,但是......经常摇晃它会让他们为有一天你把一杯巧克力慕斯误认为手机的惊喜做好准备。'*`~.【参考方案11】:我正在尝试通过adb install -r -d <app-release>.apk
?
确保您正在运行 debug 构建,然后菜单将通过快捷方式或 CLI 运行。
【讨论】:
【参考方案12】:在开发 React Native 应用程序时,我们经常使用终端
所以我在 package.json 文件中的脚本中添加了一个脚本
"menu": "adb shell input keyevent 82"
然后我点击了 $ yarn menu
让菜单出现在模拟器上 它将通过 ADB 将密钥代码 82 转发到模拟器 不是最佳方式,但我喜欢它并愿意分享它。
【讨论】:
以上是关于如何在 Android 模拟器中“摇动”Android 设备以调出开发菜单来调试我的 React Native 应用程序的主要内容,如果未能解决你的问题,请参考以下文章