Diese Frage ist identisch mit So fahren Sie den Android-Emulator über die Befehlszeile herunter .
Nach dem Versuch der vorgeschlagenen Lösung aus der ersten Antwort war adb emu kill
für mich jedoch nicht erfolgreich.
Ich automatisiere Gerätetests für eine Android-Anwendung. Mein bash-Skript läuft auf einer Maschine ohne Kopf. Es erstellt ein Android-Gerät mit Android create avd
und führt emulator
mit dem -no-window
-Attribut aus. Dann kompiliert er das Testprojekt, stellt mit adb
eine Verbindung zum Emulator her, installiert das Projekt und führt meine Tests aus. Das alles funktioniert gut.
Jetzt muss ich den Emulatorprozess beenden und genau wie der referenzierte Beitrag kann ich dies nur mit kill -9
tun.
Das Google-Tutorial Verwalten von AVDs über die Befehlszeile erwähnt nur, wie Sie Emulatoren in einer GUI-Umgebung stoppen.
Jede Hilfe wird geschätzt.
Vielleicht versuchen Sie es mit adb kill-server
, sollte es für Sie funktionieren?
oder
adb -s emulator-5554 emu kill
, wobei emulator-5554
der Name des Emulators ist.
Für Benutzer von Ubuntu habe ich einen guten Befehl gefunden, um alle laufenden Emulatoren zu stoppen (Danke an @uwe )
adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done
Um alle laufenden Emulatoren zu stoppen, verwenden wir diesen Befehl:
adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done
Die andere Antwort hat bei mir nicht funktioniert (unter Windows 7). Aber das hat funktioniert:
telnet localhost 5554
kill
Warum nicht einfach tun?
adb reboot bootloader
Manchmal der Befehl
adb -s emulator-5554 emu kill
funktionierte auf unbekannten Gründen nicht auf meinen CI-Servern oder -Desktops. Ich glaube, unter Windows ist es in Ordnung, den Prozess von Qemu zu beenden, genau wie
Taskkill /IM qemu-system-x86_64.exe /F /T
Keine der Lösungen funktionierte für mich. Ich musste den Telnet-Weg gehen, einschließlich Authentifizierung:
AUTH=$(cat "$HOME/.emulator_console_auth_token")
expect << EOF
spawn telnet localhost 5554
expect "OK"
send "auth $AUTH\r"
expect "OK"
send "kill\r"
expect "OK"
send "exit\r"
EOF
Das vollständige Skript kann mit einer kostenlosen Lizenz von https://github.com/kullo/Android-emulator-tools bezogen werden.
Update: Anscheinend werden die Konsole und die ADB-Ports immer noch nicht zuverlässig geschlossen (z. B. 5554,5555).
Ich benutze diesen Einzeiler, der zur besseren Lesbarkeit in mehrere Zeilen aufgeteilt ist:
adb devices |
Perl -nle 'print $1 if /emulator-(\d+).device$/' |
xargs -t -l1 -i bash -c "
( echo auth $(cat $HOME/.emulator_console_auth_token) ;
echo kill ;
yes ) |
telnet localhost {}"
adb kill-server beendet alle Emulatoren und startet den Server neu.
Um dies zu automatisieren, können Sie jedes Skript oder jede App verwenden, die einen String an einen Socket senden kann. Ich persönlich mag nc (netcat) unter cygwin. Wie ich schon sagte, benutze ich es so:
$ echo kill | nc -w 2 localhost 5554
(Das bedeutet, "kill" -String an den Port 5554 auf localhost zu senden und netcat nach 2 Sekunden zu beenden.)
Liste der angeschlossenen Geräte Emulator-5584 Host Emulator-5580 Host Emulator-5576 Host Emulator-5572 Host Emulator-5568 Host Emulator-5564 Host Emulator -5560 Host
C:\Users\Administrator> adb -s emulator-5584 emu kill Fehler: Verbindung mit TCP - Port 5584 konnte nicht hergestellt werden: Verbindung mit 127.0.0.1:5584 nicht möglich: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer lehnte es aktiv ab. (10061)
HINWEIS: Die GUI des Emulators läuft nicht, wird aber immer noch angezeigt
LÖSUNG:
adb kill-server
starten Sie den Emulator mit:
emulator.exe -netdelay none -netspeed full -avd Nexus_5X_API_19
Ich hoffe, dies wird dir helfen!
Ich kann es schließen mit:
adb Shell reboot -p