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?
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.
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:
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
.