Jak „potrząsnąć” urządzeniem z Androidem w emulatorze Androida, aby wyświetlić menu deweloperów w celu debugowania mojej aplikacji React Native

201

Pracuję nad wieloplatformową aplikacją mobilną React Native. W trakcie opracowywania piszę instrukcje na konsoli.log. Chcę zobaczyć te instrukcje rejestrowania w Chrome, gdy uruchamiam aplikację na Androida w domyślnym emulatorze Androida. Według dokumentów Facebooka wystarczy „potrząsnąć urządzeniem”. Jak to zrobić w emulatorze Androida?

Aby uzyskać dostęp do menu programisty w aplikacji:

W systemie iOS potrząśnij urządzeniem lub naciśnij klawisze Control + ⌘ + Z w symulatorze. Na Androidzie potrząśnij urządzeniem lub naciśnij przycisk menu sprzętowego (dostępny na starszych> urządzeniach i większości emulatorów, np. W genymotion możesz nacisnąć ⌘ + m, aby> symulować kliknięcie przycisku menu sprzętowego)

Austin
źródło

Odpowiedzi:

220

W aplikacji w emulatorze Androida naciśnij Command + MOSX lub Ctrl + MLinux i Windows.

Ryan McDermott
źródło
2
Niestety F2 nie działa już w systemie Linux w systemie Android Emulator 2 beta. Co teraz?
Szczepan Hołyszewski
7
@ SzczepanHołyszewski Chciałbym dodać, że obecnie w Linuksie ctrl + m wyświetla menu programisty
Ozum Safa
<kbd> f1 </kbd>, ... <kbd> f12 </kbd> są mylące i trudne do naciśnięcia na większości komputerów
ericn
223

Przy React Native uruchomionym w emulatorze
naciśnij ctrl+ m(w przypadku systemu Linux, przypuszczam, że jest tak samo w przypadku systemu Windows i + mw systemie Mac OS X) lub uruchom następujące polecenie w terminalu:

adb shell input keyevent 82
ericn
źródło
2
Nie działa dla mnie natychmiast. Musiałem przejść do „ustawień” („...”)> Ustawienia> Wyślij skróty klawiaturowe do> Kontrolki emulatora (nie urządzenia wirtualnego), a potem zadziałało.
Ryan Knell,
ctrl + m nie działa na systemie Linux. To polecenie powłoki adb działa, nawet gdybym wolał skrót ... chyba mogę zrobić taki, który uruchomi to polecenie, jeśli nie znajdę innego sposobu
Laurent
Aby określić urządzenie, wykonaj adb -s <device id/serial> shell input keyevent 82. Używam tego, gdy używam zarówno emulatora, jak i urządzenia fizycznego.
grisaitis
79

Jeśli używasz nowego emulatora, który jest dostarczany z Android Studio 2.0, skrót klawiaturowy dla klawisza menu to teraz Cmd + M, podobnie jak w Genymotion.

Alternatywnie, zawsze możesz wysłać naciśnięcie przycisku menu za adbpomocą terminala:

adb shell input keyevent KEYCODE_MENU

Zauważ też, że skrót przycisku menu nie jest ścisłym wymogiem, jest to tylko domyślne zachowanie zapewniane przez ReactActivityklasę Java (która jest domyślnie używana, jeśli utworzyłeś projekt react-native init). Oto odpowiedni kod z onKeyUpw ReactActivity.java:

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

Jeśli dodajesz React Native do istniejącej aplikacji ( tutaj dokumentacja ) i nie używasz ReactActivity, musisz podłączyć przycisk menu w podobny sposób. Możesz także zadzwonić ReactInstanceManager.showDevOptionsDialogza pośrednictwem dowolnego innego mechanizmu. Na przykład w aplikacji, nad którą pracuję, dodałem element menu paska działań, który wyświetla menu, ponieważ jest to wygodniejsze niż potrząsanie urządzeniem podczas pracy na urządzeniu fizycznym.

Alan Pierce
źródło
to nie działa na MIUI na moim mi4i. po prostu wyświetla tacę aplikacji. czy jest inne rozwiązanie? naprawdę nie chcę uruchamiać go na emulatorze, ponieważ spowalnia to gówno mojego laptopa
Shreyans
wygląda na to, że istnieją inne problemy specyficzne dla miui. po włączeniu pozwolenia na powiadomienie mogę teraz potrząsnąć urządzeniem, aby uzyskać menu. sprawdź ten wątek, jeśli ktoś ma problemy z MIUI github.com/facebook/react-native/issues/2754
Shreyans
Zredagowałem swój post, aby dodać więcej szczegółów na temat tego, jak to wszystko działa, co może pomóc w wyśledzeniu problemu. Domyślam się, że nie używasz ReactActivityi nie podłączyłeś przycisku menu w inny sposób.
Alan Pierce
dziękuję za szybką odpowiedź :) chociaż problem dotyczył menedżera uprawnień MIUI, który nie pozwalał na wyświetlenie okna dialogowego menu.
Shreyans,
1
Dobra wskazówka na temat ReactActivity. Wygląda na to, że ten kod został teraz przeniesiony do ReactActivityDelegate.java
Ryan H.
20

„Ctrl + m” działa w systemie Windows w emulatorze Androida, aby wyświetlić menu programisty React-Native.

Nigdzie nie można tego znaleźć. Znalazłem się tutaj, zgadłem resztę ... Dobry smutek.

Nawiasem mówiąc: OP: Nie wspomniałeś o tym, na jakim systemie operacyjnym byłeś.

spechter
źródło
14

W systemie Linux klikasz trzy kropki „...” obok emulatora, na czujnikach wirtualnych zaznacz „Przenieś”, a następnie spróbuj szybko przesunąć współrzędne x, y lub z.

wprowadź opis zdjęcia tutaj

Nicolas Pansardi
źródło
4
Właściwie to jedyne rozwiązanie, które działało dla mnie.
DsCpp,
1
Możesz także kliknąć grafikę urządzenia w pokazanym oknie i przeciągnąć ją.
brismith,
10

„Command + M” dla OSX działa dla mnie.

VolkanSahin45
źródło
8

Korzystam z systemu Mac OS, więc po naciśnięciu klawisza Command włącza opcję powiększania. Oto moje rozwiązanie

  • Otwórz okno konfiguracji [...] przycisk
  • Idź do Settingszakładki -> Generalzakładka -> Send keyboard shortcuts topole
  • Zmień wartość na Virtual device"pokazaną na rysunku

Po tym, jak skupisz się na emulatorze i naciśnij Command + M, pojawi się menu programisty.

Opcja emulatora -> Ustawienia -> Ogólne

Ponleu
źródło
4

Użyj command + m(cmd + M)na MAC. Również make sure that you are accessing your application while you try to access the Debug Menuczyli aplikacja musi działać inaczej Cmd + Mpo prostu wrócić zwykłe menu telefonu zwykłych.

Niesamowite
źródło
4

Ponieważ podczas opracowywania reagujących aplikacji natywnych tak bardzo bawimy się terminalem

więc dodałem skrypt w skryptach w pliku package.json

„menu”: „klucz wejściowy powłoki adbevent 82”

i wybrałem menu przędzy $

aby menu pojawiło się na emulatorze, przekieruje kod 82 do emulatora za pośrednictwem ADB, nie w optymalny sposób, ale podoba mi się i czułem się nim dzielić.

wprowadź opis zdjęcia tutaj

Harvinder Singh
źródło
2

na linuxie ctrl + m powinno działać, ale nie rozwiązuje problemu, kliknij (...) (jego rozszerzone elementy sterujące), a następnie zamknij to okno. teraz możesz otworzyć menu za pomocą ctrl + m. następnie:

  1. kliknij (...) (jego rozszerzone elementy sterujące)

  2. zamknij rozszerzone kontrole

  3. Ctrl + m

roozbeh siadatzadeh
źródło
1

Być może nie jest to bezpośrednie rozwiązanie, ale stworzyłem bibliotekę, która pozwala korzystać z dotykania 3 palcami zamiast wstrząsania, aby otworzyć menu programisty

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

Musisz tylko owinąć swoją aplikację:

importuj DevMenuOnTouch z „Reaktywuj-natywne-dev-menu-na-dotyk”; // lub: zaimportuj {DevMenuOnTouch} z „Reaktywuj-natywne-dev-menu-na-dotyk”

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

Jest to bardzo przydatne, gdy musisz debugować na prawdziwym urządzeniu i masz obok siebie współpracowników.

pie6k
źródło
1

Próbowałem kompilacji wydania przez adb install -r -d <app-release>.apk🤦

Upewnij się, że korzystasz z kompilacji debugowania , a następnie menu będzie działać za pomocą skrótu lub interfejsu CLI.

Lew
źródło
-1

Do laptopów z systemem Windows fn Klawisz + Control + m

UMUT
źródło