Diese Frage ist identisch mit dem Herunterfahren des Android-Emulators über die Befehlszeile .
Nach dem Versuch der vorgeschlagenen Lösung aus der ersten Antwort adb emu kill
hat sich für mich jedoch nicht als erfolgreich erwiesen.
Ich automatisiere Unit-Tests für eine Android-Anwendung. Mein Bash-Skript läuft auf einem kopflosen Computer. Es erstellt ein Android-Gerät mit android create avd
und führt es emulator
mit dem -no-window
Attribut aus. Anschließend wird das Testprojekt kompiliert, eine Verbindung zum Emulator hergestellt adb
, das Projekt installiert und meine Tests ausgeführt. Das alles funktioniert gut.
Jetzt muss ich den Emulatorprozess beenden und genau wie der referenzierte Beitrag kann ich dies nur mit tun kill -9
.
Im Google-Tutorial Verwalten von AVDs über die Befehlszeile wird nur erwähnt, wie Emulatoren in einer GUI-Umgebung gestoppt werden.
Jede Hilfe wird geschätzt.
quelle
adb -s emulator-5554 emu kill
fährt den Emulator herunter, aber der Befehl wird nicht beendet und für immer blockiert: /adb devices
.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
quelle
FÜR MAC:
ps -ax | grep emulator
Das gibt Ihnen ein breiteres Ergebnis wie:
6617 ?? 9:05.54 /Users/nav/Library/Android/sdk/emulator/qemu/darwin-x86_64/qemu-system-x86_64 -netdelay none -netspeed full -avd Nexus_One_API_29 6619 ?? 0:06.10 /Users/nav/Library/Android/sdk/emulator/emulator64-crash-service -pipe com.google.AndroidEmulator.CrashService.6617 -ppid 6617 -data-dir /tmp/android-nav/ 6658 ?? 0:07.93 /Users/nav/Library/Android/sdk/emulator/lib64/qt/libexec/QtWebEngineProcess --type=renderer --disable-accelerated-video-decode --disable-gpu-memory-buffer-video-frames --disable-pepper-3d-image-chromium --enable-threaded-compositing --file-url-path-alias=/gen=/Users/nav/Library/Android/sdk/emulator/lib64/qt/libexec/gen --enable-features=AllowContentInitiatedDataUrlNavigations --disable-features=MacV2Sandbox,MojoVideoCapture,SurfaceSynchronization,UseVideoCaptureApiForDevToolsSnapshots --disable-gpu-compositing --service-pipe-token=15570406721898250245 --lang=en-US --webengine-schemes=qrc:sLV --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=15570406721898250245 --renderer-client-id=2 6659 ?? 0:01.11 /Users/nav/Library/Android/sdk/emulator/lib64/qt/libexec/QtWebEngineProcess --type=renderer --disable-accelerated-video-decode --disable-gpu-memory-buffer-video-frames --disable-pepper-3d-image-chromium --enable-threaded-compositing --file-url-path-alias=/gen=/Users/nav/Library/Android/sdk/emulator/lib64/qt/libexec/gen --enable-features=AllowContentInitiatedDataUrlNavigations --disable-features=MacV2Sandbox,MojoVideoCapture,SurfaceSynchronization,UseVideoCaptureApiForDevToolsSnapshots --disable-gpu-compositing --service-pipe-token=--lang=en-US --webengine-schemes=qrc:sLV --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token= --renderer-client-id=3 10030 ttys000 0:00.00 grep emulator
Die erste (linke) Spalte ist die gesuchte Prozess-ID (PID).
Suchen Sie die erste PID (im obigen Beispiel ist es 6617).
Diesen Prozess erzwingen:
kill -9 PID
In meinem Fall lautet der Befehl:
kill -9 6617
quelle
Die andere Antwort hat bei mir nicht funktioniert (unter Windows 7). Aber das hat funktioniert:
telnet localhost 5554 kill
quelle
kill
scheint kein Befehl in Emulatoren zu sein, auf denen Android 9 ausgeführt wird, möglicherweise auch früherWarum nicht einfach tun
quelle
Manchmal der Befehl
adb -s emulator-5554 emu kill
funktionierte aus unbekannten Gründen nicht auf meinen CI-Servern oder Desktops. Ich denke unter Windows ist es in Ordnung, den Prozess von Qemu zu beenden, genau wie
Taskkill /IM qemu-system-x86_64.exe /F /T
quelle
Taskkill
Befehl funktionierte für mich. Vielen Dank. Es ist unglaublich, dass wir uns noch mit solchen Dingen befassen müssen.Ich kann es schließen mit:
quelle
Keine der Lösungen hat bei mir funktioniert. Ich musste den Telnet-Weg einschließlich der Authentifizierung gehen:
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 erhalten Sie mit einer kostenlosen Lizenz unter https://github.com/kullo/android-emulator-tools
Update: Es sieht so aus, als ob dies die Konsole und die ADB-Ports immer noch nicht zuverlässig schließt (z. B. 5554,5555).
quelle
Ich benutze diesen Einzeiler, der zur besseren Lesbarkeit in mehrere Zeilen unterteilt 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 {}"
quelle
Wenn Sie den Seriennamen Ihres Geräts nicht kennen müssen
adb -s emulator-5554 emu kill
, können Sie einfachadb -e emu kill
einen einzelnen Emulator beenden. Dies wird nichts töten, wenn mehr als ein Emulator gleichzeitig ausgeführt wird. Es ist jedoch nützlich für die Automatisierung, bei der Sie einen einzelnen Emulator für einen Test starten und stoppen.quelle
adb kill-server beendet alle Emulatoren und startet den Server sauber neu.
quelle
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: \ Benutzer \ Administrator> adb -s emulator-5584 emu kill error: Verbindung zum TCP-Port 5584 konnte nicht hergestellt werden: Verbindung zum 127.0.0.1:5584 kann nicht hergestellt werden: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer dies aktiv abgelehnt hat. (10061)
HINWEIS: Die Benutzeroberfläche des Emulators läuft nicht, wird aber weiterhin 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!
quelle
Um dies zu automatisieren, können Sie jedes Skript oder jede App verwenden, die eine Zeichenfolge 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
(Dies bedeutet, dass eine "kill" -String an den Port 5554 auf localhost gesendet und netcat nach 2 Sekunden beendet wird.)
quelle