programacion - Cómo cerrar el emulador de Android a través de la línea de comandos
manual de programacion android pdf (3)
No puedo detener el emulador desde el símbolo del sistema correctamente.
Estoy usando la versión de Linux Ubuntu 10.04 (64 bits) y la versión de Android SDK es 2.3.
Empecé el emulador usando su instantánea. Ahora mi preocupación es cerrar la instancia en ejecución de Emulator con gracia. He intentado con kill -9 (Id de proceso para el emulador en ejecución) que apaga el emulador, pero la próxima vez no se inicia ya que su instantánea se corrompió. Por favor, ayúdame a evitar el cierre forzado de un emulador.
¿Alguna de idea de cómo arreglarlo?
En Ubuntu 16-04, utilizando la versión 1.0.32 de ADB, estoy ejecutando el emulador para Android 4.4 (API 19) en un contenedor docker. Los puertos expuestos son 30004 para la consola y 30005 para ADB.
Puedo conectarme haciendo adb connect 0.0.0.0:30005
.
Sin embargo, para matar el emulador, tengo que usar adb -s emulator-30004 emu kill
, usar 0.0.0.0:30005
me da un error: no emulator detected
.
Tuve problemas en Ubuntu, donde el emulador abría continuamente nuevos procesos. Nunca pude cerrar el emulador y fue insensible.
htop
Pasos en htop:
- F4 para filtrar.
- Filtrar por ''avd''.
- F5 para arbol.
- Encuentra y haz clic en el proceso padre.
- F9 para subir el menú de matar.
- Selecciona la señal 9 y entra.
Por favor, no uses kill -9
indiscriminadamente, es un mal hábito.
El comando correcto es
$ adb emu kill
O mejor debería decir que fue el comando correcto hasta que algunos cambios recientes de adb
. Parece que alguien se olvidó de agregarle la autenticación.
En la última versión (a partir de junio de 2016) la última versión de adb
es
$ adb version
Android Debug Bridge version 1.0.36
Revision 0a04cdc4a62f-android
y cuando lo intentas
$ adb emu kill
no pasa nada y por eso
...
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 +++
Entonces necesitamos otra solución.
Si el comando anterior no funciona (como algunos usuarios reportaron para Windows), puede probar ( en el siguiente comando 5554 es el puerto usado por el emulador ).
Copie el contenido del archivo de token ( ~/.emulator_console_auth_token
) en el portapapeles para que pueda pegarlo durante su sesión de 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
Luego, solo puede ingresar kill
en el indicador de comando
kill
OK: killing emulator, bye bye
Connection closed by foreign host.
y el emulador saldrá.
Pero espera, debería haber una mejor manera. Y de hecho hay!
Esta gist proporciona una solución automatizada utilizando expect lugar de tener que cortar y pasar el token de autenticación cada vez.
Esperamos que te sea útil.