31

我无法从命令提示符优雅地停止模拟器。

我正在使用 Linux Ubuntu v10.04(64 位)和 Android v2.3(API 9 - Gingerbread)。

我使用它的快照启动了模拟器。现在我关心的是优雅地关闭正在运行的 Emulator 实例。我已经尝试使用kill -9(用于运行模拟器的进程 ID)来关闭模拟器,但下次它不会启动,因为它的快照已损坏。请帮助我避免强制关闭模拟器。

知道如何解决吗?

4

3 回答 3

64

请不要kill -9乱用,这是很不好的习惯。

正确的命令是

 $ adb emu kill

或者我最好说它是正确的命令,直到最近的一些adb更改。似乎有人忘记为其添加身份验证。

在最新(截至 2016 年 6 月)最新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.

模拟器将退出。

但是等等,应该有更好的方法。事实上有!

这个要点提供了一个使用expect的自动化解决方案,而不是每次都必须剪切和过去的身份验证令牌。

希望你觉得它有用。

于 2011-05-06T14:22:55.897 回答
3

我在 ubuntu 中遇到了模拟器会不断打开新进程的问题。我永远无法关闭模拟器,它没有响应。

我用了htop

htop中的步骤:

  1. F4 过滤。
  2. 过滤“avd”。
  3. F5 代表树。
  4. 找到并单击父进程。
  5. F9 提升杀戮菜单。
  6. 选择信号 9 并输入。
于 2017-07-20T09:07:37.733 回答
0

在 Ubuntu 16-04 上,使用 ADB 版本 1.0.32,我在 docker 容器中运行 Android 4.4 (API 19) 的模拟器。暴露的端口是控制台的 30004 和 ADB 的 30005。

我可以通过做连接到它adb connect 0.0.0.0:30005

但是,要杀死模拟器,我必须使用adb -s emulator-30004 emu kill, using0.0.0.0:30005给我error: no emulator detected.

于 2017-01-12T02:15:46.850 回答