Подтвердить что ты не робот

Как отключить эмулятор Android через командную строку

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

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

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

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

4b9b3361

Ответ 1

Пожалуйста, не используйте 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), вы можете попробовать (в следующей команде 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.

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

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

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

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

Ответ 2

На 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.

Ответ 3

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

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

Шаги в htop:

  • F4 для фильтрации.
  • Фильтр для 'avd'.
  • F5 для дерева.
  • Найдите и нажмите на родительский процесс.
  • F9, чтобы вызвать меню kill.
  • Выберите сигнал 9 и введите.