256

I am working on a cross-platform React Native mobile app. I am writing console.log statements as I develop. I want to see these logging statements in Chrome while I'm running the Android app in the default Android emulator. According to Facebook's docs I just need to "shake the device". How do I do this in the Android emulator?

To access the in-app developer menu:

On iOS shake the device or press control + ⌘ + z in the simulator. On Android shake the device or press hardware menu button (available on older >devices and in most of the emulators, e.g. in genymotion you can press ⌘ + m to >simulate hardware menu button click)

Austin
  • 5,305
  • 4
  • 15
  • 12

13 Answers13

282

Within your app in the Android Emulator press Command + M on macOS or Ctrl + M on Linux and Windows.

Ronan Boiteau
  • 8,910
  • 6
  • 33
  • 52
Ryan McDermott
  • 5,513
  • 5
  • 21
  • 23
  • 2
    Sadly F2 no longer works on Linux in Android Emulator 2 beta. What now? – Szczepan Hołyszewski Mar 30 '16 at 12:15
  • 7
    @SzczepanHołyszewski I would like to add that, currently in linux, ctrl + m brings up developer menu – Ozum Safa May 03 '16 at 20:22
  • the f1, ... f12 are confusing and difficult to press in most computers – ericn Aug 19 '16 at 02:39
  • 3
    I'm probably not going to get any answers on this as this thread is ages old, but I'll say it anyways; This doesn't work for me. Moving the device virtually is not recognized as a shake in my application – Pimv_h Apr 22 '21 at 08:05
247

With a React Native running in the emulator,
Press ctrl+m (for Linux, I suppose it's the same for Windows and +m for Mac OS X) or run the following in terminal:

adb shell input keyevent 82
ericn
  • 11,596
  • 13
  • 72
  • 115
  • 2
    Not working for me immediately. I needed to go into "settings" ("...") > Settings > Send Keyboard Shorcuts to > Emulator Controls (not virtual device) then it worked. – Ryan Knell Oct 30 '17 at 04:17
  • ctrl + m doesn't work on linux. This adb shell command works even if i would prefer a shortcut....guess i can make one that launch this command if i don't find any other way – Laurent Jul 08 '18 at 06:41
  • 1
    To specify a device do `adb -s shell input keyevent 82`. I use this when using both an emulator and a physical device. – william_grisaitis Aug 14 '19 at 20:42
  • 1
    this answer should marked as the correct answer as its more detailed – Parham Heidari Nov 04 '21 at 09:52
81

If you're using the new emulator that comes with Android Studio 2.0, the keyboard shortcut for the menu key is now Cmd+M, just like in Genymotion.

Alternatively, you can always send a menu button press using adb in a terminal:

adb shell input keyevent KEYCODE_MENU

Also note that the menu button shortcut isn't a strict requirement, it's just the default behavior provided by the ReactActivity Java class (which is used by default if you created your project with react-native init). Here's the relevant code from onKeyUp in ReactActivity.java:

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

If you're adding React Native to an existing app (documentation here) and you aren't using ReactActivity, you'll need to hook the menu button up in a similar way. You can also call ReactInstanceManager.showDevOptionsDialog through any other mechanism. For example, in an app I'm working on, I added a dev-only Action Bar menu item that brings up the menu, since I find that more convenient than shaking the device when working on a physical device.

Alan Pierce
  • 3,913
  • 2
  • 21
  • 19
  • this is not working on MIUI on my mi4i. it just brings up app tray. is there another solution? i really dont want to run it on an emulator as that slows the shit out of my laptop – Shreyans Apr 21 '16 at 21:19
  • it seems there are other issues specific to miui. after enabling notification permission i can now shake device to get the menu. check this thread in case anybody else is having issues with MIUI https://github.com/facebook/react-native/issues/2754 – Shreyans Apr 21 '16 at 21:42
  • I edited my post to add more detail on how all this stuff works, which may help you track down the problem. My best guess is you're not using `ReactActivity` and haven't hooked up the menu button through other means. – Alan Pierce Apr 21 '16 at 21:45
  • thank you for your prompt response :) though the issue was with MIUI permissions manager which did not let the menu dialog show. – Shreyans Apr 21 '16 at 22:28
  • 1
    Nice tip about ReactActivity. Seems like that code has now been moved to ReactActivityDelegate.java – Ryan H. Mar 29 '18 at 15:06
  • I think I've seen more than 20 SO answers and only this one points where it's handled and I found a fix for my (existing app + react-native) app. Thanks! – eugene Aug 15 '19 at 06:55
28

For Linux you click on the three dots "..." beside the emulator, on Virtual sensors check "Move" and then try quickly moving either x, y or z coordinates.

enter image description here

21

'Ctrl + m' works for Windows in the Android emulator to bring up the React-Native developer menu.

Couldn't find that documented anywhere. Found my way here, guessed the rest... Good grief.

By the way: OP: You didn't mention what OS you were on.

spechter
  • 1,640
  • 14
  • 18
14

I am on Mac OS so when I press Command, it enable zooming option. Here is my solution

  • Open Configuration window [...] button
  • Go toSettings tab ->General tab -> Send keyboard shortcuts to field
  • Change value to Virtual device" as shown in the picture

After that focus on the emulator and press Command + M, the dev menu appears.

Emulator Option -> Settings -> General

Ponleu
  • 1,185
  • 10
  • 23
11

'Command + M' for OSX is working for me.

VolkanSahin45
  • 1,842
  • 10
  • 24
6

As while developing react native apps, we play with the terminal so much

so I added a script in the scripts in the package.json file

"menu": "adb shell input keyevent 82"

and I hit $ yarn menu

for the menu to appear on the emulator it will forward the keycode 82 to the emulator via ADB not the optimal way but I like it and felt to share it.

enter image description here

Harvinder Singh
  • 1,371
  • 16
  • 14
5

Use command + m(cmd + M) on MAC. Also make sure that you are accessing your application while you try to access the Debug Menui.e. your app must be running otherwise Cmd + M will just return the usual ordinary phone menu.

Awesome
  • 370
  • 3
  • 8
3

on linux ctrl+m should work but it doesn't for solving the problem click on the (...) (its extended controls) and then close that window.now you can open menu by ctrl+m. then:

  1. click on the (...) (its extended controls)

  2. close extended controls

  3. ctrl+m

Roozbeh
  • 31
  • 2
2

If you want to simulate a 1 second shake from terminal you can do the following command:

adb emu sensor set acceleration 100:100:100; sleep 1; adb emu sensor set acceleration 0:0:0
Roberto Leinardi
  • 5,717
  • 3
  • 48
  • 48
1

It might be not direct solution, but I've created a lib that allows you to use 3 fingers touch instead of shake to open dev menu, when in development mode

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

You only have to wrap your app inside:

import DevMenuOnTouch from 'react-native-dev-menu-on-touch'; // or: import { DevMenuOnTouch } from 'react-native-dev-menu-on-touch'

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

It's really useful when you have to debug on real device and you have co-workers sitting next to you.

Adam Pietrasiak
  • 11,708
  • 7
  • 73
  • 89
  • Yeah, but...shaking it often prepares them for the surprise that is the one day you mistake a cup of chocolate mousse for your cell phone .'* `~. – DukeDidntNukeEm Aug 24 '21 at 22:49
1

I was trying on a release build via adb install -r -d <app-release>.apk

Make sure you're running the debug build, then the menu will work via the shortcut or CLI.

Leo
  • 9,231
  • 2
  • 41
  • 54