it-swarm.com.de

So schließen Sie den Android-Emulator über die Befehlszeile

Ich kann den Emulator nicht auffordern, die Eingabeaufforderung auf elegante Weise zu beenden.

Ich verwende Linux Ubuntu 10.04 (64-Bit) und die Android SDK-Version 2.3.

Ich habe den Emulator mit seinem Snapshot gestartet. Jetzt geht es mir darum, die laufende Instanz von Emulator ordnungsgemäß herunterzufahren. Ich habe es mit kill -9 (Prozess-ID für den Emulator ausgeführt) versucht, der den Emulator herunterfährt, aber das nächste Mal startet er nicht, da sein Snapshot beschädigt wurde. Bitte helfen Sie mir, den Emulator zwangsweise abzuschalten. 

Irgendeine Idee, wie man es reparieren kann?

20
Sam

Bitte verwenden Sie kill -9 nicht wahllos, es ist eine sehr schlechte Angewohnheit.

Der richtige Befehl lautet

 $ adb emu kill

Oder ich sollte es besser sagen war der richtige Befehl bis sich einige adbänderten. Es scheint, als hätte jemand vergessen, die Authentifizierung hinzuzufügen.

In der neuesten Version (Stand Juni 2016) ist die letzte Version von adbname__

$ adb version
Android Debug Bridge version 1.0.36
Revision 0a04cdc4a62f-Android

und wenn du es versuchst

$ adb emu kill

nichts passiert und deshalb

...
connect(3, {sa_family=AF_INET, sin_port=htons(5554), 
sin_addr=inet_addr("127.0.0.1")}, 16) = 0
write(3, "kill\nquit\n", 10)            = 10
read(3, "\377\373\1", 8192)             = 3
read(3, "\377\373\3\377\373\0\377\375\0", 8192) = 9
read(3, "Android Console: Authentication required\r\nAndroid Console: type 'auth <auth_token>' to authenticate\r\nAndroid Console: you can find your <auth_token> in \r\n'/home/diego/.emulator_console_auth_token'\r\nOK\r\n", 8192) = 202
read(3, "k\33[K", 8192)                 = 4
read(3, "\33[Dki\33[K", 8192)           = 8
read(3, "\33[D\33[Dkil\33[K\33[D\33[D\33[Dkill\33[K", 8192) = 28
read(3, "\r\nKO: unknown command, try 'help'\r\n", 8192) = 35
read(3, "q\33[K\33[Dqu\33[K", 8192)     = 12
read(3, "\33[D\33[Dqui\33[K\33[D\33[D\33[Dquit\33[K", 8192) = 28
read(3, "\r\n", 8192)                   = 2
read(3, "", 8192)                       = 0
close(3)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Dann brauchen wir eine andere Lösung.

Wenn der vorherige Befehl nicht funktioniert (wie einige Benutzer für Windows gemeldet haben), können Sie es versuchen (im nächsten Befehl 5554 ist der vom Emulator verwendete Port).

Kopieren Sie den Inhalt der Token-Datei (~/.emulator_console_auth_token) in die Zwischenablage, damit Sie sie während Ihrer Telnet-Sitzung einfügen können:

$ telnet localhost 5554

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: Authentication required
Android Console: type 'auth <auth_token>' to authenticate
Android Console: you can find your <auth_token> in 
'/home/user/.emulator_console_auth_token'
OK
auth <YOUR_TOKEN_HERE>
Android Console: type 'help' for a list of commands
OK
Android console command help:

    help|h|?         print a list of commands
    crash            crash the emulator instance
    kill             kill the emulator instance
    quit|exit        quit control session
    redir            manage port redirections
    power            power related commands
    event            simulate hardware events
    avd              control virtual device execution
    finger           manage emulator fingerprint
    geo              Geo-location commands
    sms              SMS related commands
    cdma             CDMA related commands
    gsm              GSM related commands
    rotate           rotate the screen by 90 degrees

try 'help <command>' for command-specific help
OK

Dann können Sie einfach an der Eingabeaufforderung killeingeben

kill
OK: killing emulator, bye bye
Connection closed by foreign Host.

und der Emulator wird beendet.

Aber warten Sie, es sollte einen besseren Weg geben. Und in der Tat gibt es!

Diese Gist bietet eine automatisierte Lösung, die Expect verwendet, anstatt das Authentifizierungstoken jedes Mal abschneiden zu müssen.

Ich hoffe, Sie finden es nützlich.

49

Ich hatte Probleme in Ubuntu, wo der Emulator ständig neue Prozesse öffnete. Ich konnte den Emulator niemals schließen und er reagierte nicht.

Ich habe htop verwendet

Schritte in htop:

  1. F4 zum Filtern.
  2. Filter für 'avd'.
  3. F5 für Baum.
  4. Suchen und klicken Sie auf den übergeordneten Prozess.
  5. F9, um das Kill-Menü aufzurufen.
  6. Signal 9 auswählen und eingeben.
0
Shannanigans

Auf Ubuntu 16-04 verwende ich mit der ADB-Version 1.0.32 den Emulator für Android 4.4 (API 19) in einem Docker-Container. Die freigelegten Ports sind 30004 für die Konsole und 30005 für ADB.

Ich kann mich mit adb connect 0.0.0.0:30005 verbinden.

Um den Emulator zu beenden, muss ich jedoch adb -s emulator-30004 emu kill verwenden. Mit 0.0.0.0:30005 erhalten Sie error: no emulator detected.

0
user276648