¿Cómo puedo "sacudir" un dispositivo Android dentro del emulador de Android para que aparezca el menú de desarrollo para depurar mi aplicación React Native

201

Estoy trabajando en una aplicación móvil multiplataforma React Native. Estoy escribiendo declaraciones console.log a medida que me desarrollo. Quiero ver estas declaraciones de registro en Chrome mientras ejecuto la aplicación de Android en el emulador predeterminado de Android. Según los documentos de Facebook, solo necesito "sacudir el dispositivo". ¿Cómo hago esto en el emulador de Android?

Para acceder al menú de desarrollador en la aplicación:

En iOS agite el dispositivo o presione control + ⌘ + z en el simulador. En Android, agite el dispositivo o presione el botón de menú de hardware (disponible en dispositivos> antiguos y en la mayoría de los emuladores, por ejemplo, en genymotion puede presionar ⌘ + m para> simular el clic del botón de menú de hardware)

Austin
fuente

Respuestas:

220

Dentro de su aplicación en el emulador de Android, presione Command + MOSX o Ctrl + MLinux y Windows.

Ryan McDermott
fuente
2
Lamentablemente, F2 ya no funciona en Linux en Android Emulator 2 beta. ¿Ahora que?
Szczepan Hołyszewski
77
@ SzczepanHołyszewski Me gustaría agregar que, actualmente en linux, ctrl + m muestra el menú del desarrollador
Ozum Safa
los <kbd> f1 </kbd>, ... <kbd> f12 </kbd> son confusos y difíciles de presionar en la mayoría de las computadoras
ericn
223

Con React Native ejecutándose en el emulador,
presione ctrl+ m(para Linux, supongo que es lo mismo para Windows y + mpara Mac OS X) o ejecute lo siguiente en la terminal:

adb shell input keyevent 82
ericn
fuente
2
No funciona para mí de inmediato. Tenía que ir a "configuración" ("...")> Configuración> Enviar accesos directos del teclado a> Controles de emulador (no dispositivo virtual) y luego funcionó.
Ryan Knell
ctrl + m no funciona en linux. Este comando de adb shell funciona incluso si prefiero un atajo ... supongo que puedo hacer uno que inicie este comando si no encuentro otra manera
Laurent
Para especificar un dispositivo hacer adb -s <device id/serial> shell input keyevent 82. Lo uso cuando uso tanto un emulador como un dispositivo físico.
grisaitis
79

Si está utilizando el nuevo emulador que viene con Android Studio 2.0, el método abreviado de teclado para la tecla de menú ahora es Cmd + M, al igual que en Genymotion.

Alternativamente, siempre puede enviar un botón de menú presionando usando adben una terminal:

adb shell input keyevent KEYCODE_MENU

También tenga en cuenta que el acceso directo del botón de menú no es un requisito estricto, es solo el comportamiento predeterminado proporcionado por la ReactActivityclase Java (que se usa de forma predeterminada si creó su proyecto con react-native init). Aquí está el código relevante de onKeyUpen ReactActivity.java:

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

Si está agregando React Native a una aplicación existente ( documentación aquí ) y no está usando ReactActivity, deberá conectar el botón de menú de manera similar. También puede llamar a ReactInstanceManager.showDevOptionsDialogtravés de cualquier otro mecanismo. Por ejemplo, en una aplicación en la que estoy trabajando, agregué un elemento de menú de la Barra de acción solo para desarrolladores que muestra el menú, ya que me parece más conveniente que sacudir el dispositivo cuando se trabaja en un dispositivo físico.

Alan Pierce
fuente
Esto no funciona en MIUI en mi mi4i. solo abre la bandeja de aplicaciones. ¿hay otra solución? Realmente no quiero ejecutarlo en un emulador, ya que eso ralentiza la mierda de mi computadora portátil
Shreyans
parece que hay otros problemas específicos de miui. Después de habilitar el permiso de notificación, ahora puedo sacudir el dispositivo para obtener el menú. revise este hilo en caso de que alguien más tenga problemas con MIUI github.com/facebook/react-native/issues/2754
Shreyans
Edité mi publicación para agregar más detalles sobre cómo funciona todo esto, lo que puede ayudarlo a localizar el problema. Mi mejor conjetura es que no estás usando ReactActivityy no has conectado el botón de menú a través de otros medios.
Alan Pierce
gracias por su pronta respuesta :) aunque el problema fue con el administrador de permisos MIUI que no permitió que se mostrara el diálogo del menú.
Shreyans
1
Buen consejo sobre ReactActivity. Parece que ese código ahora se ha movido a ReactActivityDelegate.java
Ryan H.
20

'Ctrl + m' funciona para Windows en el emulador de Android para abrir el menú de desarrollador React-Native.

No pude encontrar eso documentado en ningún lado. Encontré mi camino aquí, adiviné el resto ... Dios mío.

Por cierto: OP: No mencionaste en qué sistema operativo estabas.

Spechter
fuente
14

Para Linux, haga clic en los tres puntos "..." al lado del emulador, en los sensores virtuales marque "Mover" y luego intente mover rápidamente las coordenadas x, y o z.

ingrese la descripción de la imagen aquí

Nicolas Pansardi
fuente
44
En realidad, esa es la única solución que funcionó para mí.
DsCpp
1
También puede hacer clic en el gráfico del dispositivo en la ventana que se muestra y arrastrarlo.
brismith
10

'Command + M' para OSX está funcionando para mí.

VolkanSahin45
fuente
8

Estoy en Mac OS, así que cuando presiono Command, habilito la opción de zoom. Aqui esta mi solucion

  • Abrir el botón de la ventana [...] Configuración
  • Vaya a la Settingspestaña -> Generalpestaña -> Send keyboard shortcuts tocampo
  • Cambie el valor a Virtual device"como se muestra en la imagen

Luego de enfocarse en el emulador y presionar Comando + M, aparece el menú de desarrollo.

Opción de emulador -> Configuración -> General

Ponleu
fuente
4

Usar command + m(cmd + M)en MAC. Además, make sure that you are accessing your application while you try to access the Debug Menues decir, su aplicación debe estar ejecutándose; de ​​lo contrario Cmd + M, solo devolverá el menú normal del teléfono.

Increíble
fuente
4

Mientras desarrollamos aplicaciones nativas reactivas, jugamos mucho con el terminal

así que agregué un script en los scripts en el archivo package.json

"menu": "adb shell input keyevent 82"

y llegué al menú de hilo

para que el menú aparezca en el emulador, reenviará el código clave 82 al emulador a través de ADB, no de la manera óptima, pero me gusta y me pareció compartirlo.

ingrese la descripción de la imagen aquí

Harvinder Singh
fuente
2

en linux ctrl + m debería funcionar pero no sirve para resolver el problema, haga clic en (...) (sus controles extendidos) y luego cierre esa ventana. ahora puede abrir el menú con ctrl + m. luego:

  1. haga clic en (...) (sus controles extendidos)

  2. cerrar controles extendidos

  3. Ctrl + m

roozbeh siadatzadeh
fuente
1

Puede que no sea una solución directa, pero he creado una biblioteca que le permite usar 3 dedos táctiles en lugar de agitar para abrir el menú de desarrollo, cuando está en modo de desarrollo

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

Solo tienes que envolver tu aplicación dentro:

importar DevMenuOnTouch desde 'react-native-dev-menu-on-touch'; // o: importa {DevMenuOnTouch} desde 'react-native-dev-menu-on-touch'

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

Es realmente útil cuando tienes que depurar en un dispositivo real y tienes compañeros de trabajo sentados a tu lado.

pie6k
fuente
1

Estaba probando una versión de lanzamiento a través de adb install -r -d <app-release>.apk🤦

Asegúrese de ejecutar la compilación de depuración , luego el menú funcionará a través del acceso directo o CLI.

León
fuente
-1

Para computadoras portátiles con Windows fn Key + Control + m

UMUT
fuente