web-dev-qa-db-fra.com

Comment arrêter l'émulateur Android via une ligne de commande

Je ne parviens pas à arrêter l'émulateur à partir de la commande Invite de manière élégante.

J'utilise la version Linux Ubuntu 10.04 (64 bits) et la version du SDK Android est la 2.3.

J'ai commencé l'émulateur en utilisant son instantané. Mon souci est maintenant d'arrêter gracieusement l'instance en cours d'exécution d'Emulator. J'ai essayé avec kill -9 (Id de processus pour l'émulateur en cours d'exécution) qui a arrêté l'émulateur, mais la prochaine fois, il ne démarre pas car sa capture instantanée a été corrompue. S'il vous plaît, aidez-moi à éviter un arrêt forcé de l'émulateur. 

Toute idée de comment résoudre ce problème?

20
Sam

Veuillez ne pas utiliser kill -9 sans discernement, c'est une très mauvaise habitude.

La commande correcte est

 $ adb emu kill

Ou je devrais plutôt mieux le dire était la commande correcte jusqu'à ce que certains changements récents adb. Il semble que quelqu'un ait oublié d'y ajouter l'authentification.

Dans la dernière (en date de juin 2016), la dernière version de adb est

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

et quand tu essaies

$ adb emu kill

rien ne se passe, et c'est pourquoi

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

Ensuite, nous avons besoin d'une autre solution.

Si la commande précédente ne fonctionne pas (comme certains utilisateurs l'ont signalé pour Windows), vous pouvez essayer (dans la commande suivante, le port utilisé par l'émulateur est 5554} _).

Copiez le contenu du fichier de jeton (~/.emulator_console_auth_token) dans le presse-papiers afin de pouvoir le coller pendant votre session telnet:

$ 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

Ensuite, vous pouvez simplement entrer kill à la commande Invite.

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

et l'émulateur va quitter.

Mais attendez, il devrait y avoir un meilleur moyen. Et en fait il y en a!

This Gist fournit une solution automatisée utilisant expect au lieu de devoir couper et coller le jeton d’authentification à chaque fois.

J'espère que vous le trouverez utile.

49

J'ai eu des problèmes dans Ubuntu où l'émulateur ouvrirait continuellement de nouveaux processus Je ne pouvais jamais fermer l'émulateur et il ne répondait plus.

J'ai utilisé htop

Étapes dans htop:

  1. F4 à filtrer.
  2. Filtre pour 'avd'.
  3. F5 pour l'arbre.
  4. Recherchez et cliquez sur le processus parent.
  5. F9 pour élever le menu kill.
  6. Sélectionnez le signal 9 et entrez.
0
Shannanigans

Sur Ubuntu 16-04, avec ADB version 1.0.32, j'utilise l'émulateur pour Android 4.4 (API 19) dans un conteneur Docker. Les ports exposés sont 30004 pour la console et 30005 pour ADB.

Je peux me connecter en faisant adb connect 0.0.0.0:30005.

Pour tuer l'émulateur cependant, je dois utiliser adb -s emulator-30004 emu kill, utiliser 0.0.0.0:30005 me donne error: no emulator detected.

0
user276648