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).

Austin
quelle

Antworten:

220

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

Ryan McDermott
quelle
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
ericn
quelle
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.

Alan Pierce
quelle
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.

Spechter
quelle
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

Nicolas Pansardi
quelle
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
10

'Command + M' für OSX funktioniert für mich.

VolkanSahin45
quelle
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

Ponleu
quelle
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.

Genial
quelle
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

Harvinder Singh
quelle
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

roozbeh siadatzadeh
quelle
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.

pie6k
quelle
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.

Löwe
quelle
-1

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

UMUT
quelle