studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android ubuntu emulation avd qemu

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:

  1. F4 para filtrar.
  2. Filtrar por ''avd''.
  3. F5 para arbol.
  4. Encuentra y haz clic en el proceso padre.
  5. F9 para subir el menú de matar.
  6. 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.