Wie kann ich ein Android-Gerät im Android-Emulator „schütteln“, um das Entwicklermenü zum Debuggen meiner React Native-App aufzurufen?


201

Ich arbeite an einer plattformübergreifenden mobilen App von React Native. Ich schreibe Konsolen.log-Anweisungen, während ich mich entwickle. Ich möchte diese Protokollierungsanweisungen in Chrome sehen, während ich die Android-App im Standard-Android-Emulator ausführe. Laut Facebooks Dokumenten muss ich nur "das Gerät schütteln". Wie mache ich das im Android-Emulator?

So greifen Sie auf das In-App-Entwicklermenü zu:

Schütteln Sie unter iOS das Gerät oder drücken Sie im Simulator die Strg-Taste + ⌘ + z. Schütteln Sie unter Android das Gerät oder drücken Sie die Hardware-Menütaste (verfügbar auf älteren> Geräten und in den meisten Emulatoren, z. B. in Genymotion können Sie ⌘ + m drücken, um> das Klicken auf die Hardware-Menütaste zu simulieren).

Antworten:


220

Drücken Sie in Ihrer App im Android Emulator Command + Munter OSX oder Ctrl + Munter Linux und Windows.


2
Leider funktioniert F2 unter Linux in der Beta-Version von Android Emulator 2 nicht mehr. Was jetzt?
Szczepan Hołyszewski

7
@ SzczepanHołyszewski Ich möchte hinzufügen, dass derzeit unter Linux Strg + M das Entwicklermenü
aufruft

die <kbd> f1 </ kbd>, ... <kbd> f12 </ kbd> sind verwirrend und auf den meisten Computern schwer zu drücken
ericn

223

Wenn ein React Native im Emulator ausgeführt wird,
drücken Sie ctrl+ m(für Linux ist es vermutlich dasselbe für Windows und + mfür Mac OS X) oder führen Sie im Terminal Folgendes aus:

adb shell input keyevent 82

2
Ich arbeite nicht sofort für mich. Ich musste zu "Einstellungen" ("...")> Einstellungen> Tastatur-Shorcuts senden an> Emulator-Steuerelemente (kein virtuelles Gerät) gehen, dann funktionierte es.
Ryan Knell

Strg + M funktioniert nicht unter Linux. Dieser ADB-Shell-Befehl funktioniert auch, wenn ich eine Verknüpfung bevorzugen würde. Ich schätze, ich kann einen erstellen, der diesen Befehl startet, wenn ich keinen anderen Weg finde
Laurent

So geben Sie ein Gerät an adb -s <device id/serial> shell input keyevent 82: Ich benutze dies, wenn ich sowohl einen Emulator als auch ein physisches Gerät benutze.
Grisaitis

79

Wenn Sie den neuen Emulator verwenden, der mit Android Studio 2.0 geliefert wird, lautet die Tastenkombination für die Menütaste jetzt Cmd + M, genau wie in Genymotion.

Alternativ können Sie jederzeit einen Menütastendruck über adbein Terminal senden :

adb shell input keyevent KEYCODE_MENU

Beachten Sie auch, dass die Verknüpfung der Menüschaltflächen keine strenge Anforderung ist, sondern nur das Standardverhalten der ReactActivityJava-Klasse (das standardmäßig verwendet wird, wenn Sie Ihr Projekt mit erstellt haben react-native init). Hier ist der relevante Code von onKeyUpin ReactActivity.java:

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

Wenn Sie einer vorhandenen App React Native hinzufügen ( Dokumentation hier ) und diese nicht verwenden ReactActivity, müssen Sie die Menüschaltfläche auf ähnliche Weise anschließen. Sie können auch ReactInstanceManager.showDevOptionsDialogüber einen anderen Mechanismus aufrufen . In einer App, an der ich gerade arbeite, habe ich beispielsweise einen Nur-Entwickler-Menüpunkt für die Aktionsleiste hinzugefügt, der das Menü aufruft, da dies für mich bequemer ist, als das Gerät bei der Arbeit an einem physischen Gerät zu schütteln.


Dies funktioniert nicht auf MIUI auf meinem mi4i. Es wird nur die App-Taskleiste angezeigt. Gibt es eine andere Lösung? Ich möchte es wirklich nicht auf einem Emulator ausführen, da dies die Scheiße aus meinem Laptop verlangsamt
Shreyans

Es scheint, dass es andere Probleme gibt, die für miui spezifisch sind. Nachdem ich die Benachrichtigungsberechtigung aktiviert habe, kann ich das Gerät schütteln, um das Menü zu erhalten. Überprüfen Sie diesen Thread, falls andere Probleme mit MIUI haben. github.com/facebook/react-native/issues/2754
Shreyans

Ich habe meinen Beitrag bearbeitet, um mehr Details darüber hinzuzufügen, wie all diese Dinge funktionieren, was Ihnen helfen kann, das Problem aufzuspüren. Ich gehe davon aus, dass Sie die Menüschaltfläche nicht verwenden ReactActivityund sie nicht auf andere Weise angeschlossen haben.
Alan Pierce

Vielen Dank für Ihre schnelle Antwort :) Das Problem war jedoch der MIUI-Berechtigungsmanager, bei dem der Menüdialog nicht angezeigt wurde.
Shreyans

1
Netter Tipp zu ReactActivity. Scheint, als ob dieser Code jetzt nach ReactActivityDelegate.java verschoben wurde
Ryan H.

20

'Strg + m' funktioniert für Windows im Android-Emulator, um das React-Native-Entwicklermenü aufzurufen.

Konnte das nirgendwo dokumentiert finden. Ich habe meinen Weg hierher gefunden, den Rest erraten ... Guter Kummer.

Übrigens: OP: Sie haben nicht erwähnt, auf welchem ​​Betriebssystem Sie sich befanden.


14

Unter Linux klicken Sie auf die drei Punkte "..." neben dem Emulator. Aktivieren Sie auf Virtuelle Sensoren "Verschieben" und versuchen Sie dann, schnell entweder die x-, y- oder z-Koordinaten zu verschieben.

Geben Sie hier die Bildbeschreibung ein


4
Eigentlich ist das die einzige Lösung, die für mich funktioniert hat.
DsCpp

1
Sie können auch auf die Gerätegrafik im angezeigten Fenster klicken und sie ziehen.
Brismith


8

Ich bin unter Mac OS. Wenn ich also Befehl drücke, wird die Zoomoption aktiviert. Hier ist meine Lösung

  • Öffnen Sie die Schaltfläche [...] des Konfigurationsfensters
  • Gehen Sie zu SettingsRegisterkarte -> GeneralRegisterkarte -> Send keyboard shortcuts toFeld
  • Ändern Sie den Wert in Virtual device"wie im Bild gezeigt

Nachdem Sie sich auf den Emulator konzentriert und Befehlstaste + M gedrückt haben, wird das Dev-Menü angezeigt.

Emulatoroption -> Einstellungen -> Allgemein


4

Verwendung command + m(cmd + M)auf MAC. Außerdem make sure that you are accessing your application while you try to access the Debug Menumuss Ihre App ausgeführt werden, da sonst Cmd + Mdas übliche Telefonmenü zurückgegeben wird.


4

Während wir native Apps entwickeln, spielen wir so viel mit dem Terminal

Deshalb habe ich ein Skript in die Skripte in der Datei package.json eingefügt

"menu": "adb shell input keyevent 82"

und ich drücke auf $ Garnmenü

Damit das Menü auf dem Emulator angezeigt wird, wird der Schlüsselcode 82 über ADB nicht optimal an den Emulator weitergeleitet, aber ich mag es und habe das Gefühl, es zu teilen.

Geben Sie hier die Bildbeschreibung ein


2

Unter Linux sollte Strg + M funktionieren, aber um das Problem nicht zu lösen, klicken Sie auf (...) (die erweiterten Steuerelemente) und schließen Sie das Fenster. Jetzt können Sie das Menü mit Strg + M öffnen. dann:

  1. Klicken Sie auf (...) (seine erweiterten Steuerelemente)

  2. Erweiterte Bedienelemente schließen

  3. Strg + m


1

Es ist vielleicht keine direkte Lösung, aber ich habe eine Bibliothek erstellt, mit der Sie im Entwicklungsmodus mit 3 Fingern berühren können, anstatt zu schütteln , um das Entwicklungsmenü zu öffnen

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

Sie müssen Ihre App nur einpacken:

DevMenuOnTouch aus 'React-Native-Dev-Menü-on-Touch' importieren; // oder: {DevMenuOnTouch} aus 'react-native-dev-menu-on-touch' importieren '

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

Dies ist sehr nützlich, wenn Sie auf einem realen Gerät debuggen müssen und Mitarbeiter neben Ihnen sitzen.


1

Ich habe versucht, ein Release über adb install -r -d <app-release>.apk🤦 zu erstellen

Stellen Sie sicher, dass Sie den Debug- Build ausführen. Das Menü funktioniert dann über die Verknüpfung oder die CLI.


-1

Für Windows-Laptops fn Taste + Strg + m

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.