Как отключить эмулятор Android через командную строку - PullRequest
23 голосов
/ 06 мая 2011

Я не могу изящно остановить эмулятор из командной строки.

Я использую Linux Ubuntu 10.04 (64-разрядная версия), а Android SDK версии 2.3.

Я запустил эмулятор, используя его снимок. Теперь моя задача - корректно завершить работу запущенного экземпляра эмулятора. Я попытался с kill -9 (идентификатор процесса для запуска эмулятора), который закрывает эмулятор, но в следующий раз он не запускается, поскольку его снимок был поврежден. Пожалуйста, помогите мне избежать принудительного отключения эмулятора.

Есть идеи как это исправить?

Ответы [ 3 ]

52 голосов
/ 06 мая 2011

Пожалуйста, не используйте kill -9 без разбора, это очень плохая привычка.

Правильная команда:

 $ adb emu kill

Или лучше сказать, было правильнымкоманда до тех пор, пока не произойдут недавние изменения adb.Кажется, кто-то забыл добавить аутентификацию к нему.

В самой последней (по состоянию на июнь 2016 г.) последней версии adb

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

и при попытке

$ adb emu kill

ничего не происходит, и поэтому

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

Тогда нам нужно другое решение.

Если предыдущая команда не работает (как некоторые пользователи сообщали для Windows), вы можетеtry ( в следующей команде 5554 - это порт, используемый эмулятором ).

Скопируйте содержимое файла токена (~/.emulator_console_auth_token) в буфер обмена, чтобы вы могли вставить его во времясеанс 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

Затем вы можете просто ввести kill в командной строке

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

и эмулятор выйдет.

Но подождите, тамдолжно быть лучше.И действительно, есть!

Этот гист предоставляет автоматизированное решение, использующее ожидайте вместо необходимости каждый раз обрезать и пропускать маркер аутентификации.

Надеюсь, вы найдете это полезным.

0 голосов
/ 20 июля 2017

У меня были проблемы в Ubuntu, когда эмулятор постоянно открывал новые процессы. Я никогда не мог закрыть эмулятор, и он не отвечал.

Я использовал htop

Шаги в htop:

  1. F4 для фильтрации.
  2. Фильтр для 'avd'.
  3. F5 для дерева.
  4. Найдите и нажмите на родительский процесс.
  5. F9, чтобы вызвать меню убийства.
  6. Выберите сигнал 9 и введите.
0 голосов
/ 12 января 2017

В Ubuntu 16-04, используя ADB версии 1.0.32, я запускаю эмулятор для Android 4.4 (API 19) в док-контейнере. Открытые порты 30004 для консоли и 30005 для ADB.

Я могу подключиться к нему, выполнив adb connect 0.0.0.0:30005.

Чтобы убить эмулятор, я должен использовать adb -s emulator-30004 emu kill, а 0.0.0.0:30005 дает мне error: no emulator detected.

...