命令行中的Android Stop Emulator


76

这个问题与如何通过命令行关闭Android仿真器相同。

但是,从第一个答案尝试建议的解决方案后,adb emu kill对我而言并没有证明是成功的。

我正在为Android应用程序自动化单元测试。我的bash脚本在无头计算机上运行。它使用创建一个android设备android create avdemulator使用-no-window属性执行。然后,它编译测试项目,使用连接到仿真器adb,安装项目并执行我的测试。这一切都很好。

现在,我需要终止仿真器过程,就像引用的帖子一样,我只能使用来执行此操作kill -9

Google的“从命令行管理AVD ”教程只提到了如何在GUI环境中停止模拟器。

任何帮助表示赞赏。

Answers:


173

使用adb kill-server。应该会有所帮助。要么

adb -s emulator-5554 emu killemulator-5554仿真器名称在哪里。

对于Ubuntu用户,我发现了一个很好的命令来停止所有正在运行的仿真器(感谢@uwe

adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done

3
adb kill-server停止adb,但不停止模拟器进程。并且emu kill语句总是返回未找到的模拟器
jsjrobotics

找不到模拟器?永远不要相信。如果您启动模拟器-您将拥有模拟器。不是吗 尝试杀死另一个端口的仿真器。端口数包含在上面的链接中。
谢尔盖·舒斯蒂科夫

5
这两个日期都
无法

7
adb -s emulator-5554 emu kill确实关闭了仿真器,但命令没有终止并永远阻塞:/
Simon Warta

1
对于对此感到困惑的任何人,您都可以使用来找到模拟器名称adb devices
nhouser9

29

要停止所有正在运行的仿真器,我们使用以下命令:

adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done

9

另一个答案对我不起作用(在Windows 7上)。但这有效:

telnet localhost 5554
kill

1
但需要通过“控制面板”>“程序和功能”>“打开或关闭Windows功能”来激活Telnet功能之前> Telnet客户端
Ayaz Alifov 2015年

kill在运行Android 9的模拟器中似乎也不是命令,可能是更早的版本
Vanquish46 '18

9

对于MAC:

  1. 跑:
ps -ax | grep emulator 

这会为您带来更广泛的结果,例如:

 6617 ??         9:05.54 /Users/nav/Library/Android/sdk/emulator/qemu/darwin-x86_64/qemu-system-x86_64 -netdelay none -netspeed full -avd Nexus_One_API_29
 6619 ??         0:06.10 /Users/nav/Library/Android/sdk/emulator/emulator64-crash-service -pipe com.google.AndroidEmulator.CrashService.6617 -ppid 6617 -data-dir /tmp/android-nav/
 6658 ??         0:07.93 /Users/nav/Library/Android/sdk/emulator/lib64/qt/libexec/QtWebEngineProcess --type=renderer --disable-accelerated-video-decode --disable-gpu-memory-buffer-video-frames --disable-pepper-3d-image-chromium --enable-threaded-compositing --file-url-path-alias=/gen=/Users/nav/Library/Android/sdk/emulator/lib64/qt/libexec/gen --enable-features=AllowContentInitiatedDataUrlNavigations --disable-features=MacV2Sandbox,MojoVideoCapture,SurfaceSynchronization,UseVideoCaptureApiForDevToolsSnapshots --disable-gpu-compositing --service-pipe-token=15570406721898250245 --lang=en-US --webengine-schemes=qrc:sLV --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=15570406721898250245 --renderer-client-id=2
 6659 ??         0:01.11 /Users/nav/Library/Android/sdk/emulator/lib64/qt/libexec/QtWebEngineProcess --type=renderer --disable-accelerated-video-decode --disable-gpu-memory-buffer-video-frames --disable-pepper-3d-image-chromium --enable-threaded-compositing --file-url-path-alias=/gen=/Users/nav/Library/Android/sdk/emulator/lib64/qt/libexec/gen --enable-features=AllowContentInitiatedDataUrlNavigations --disable-features=MacV2Sandbox,MojoVideoCapture,SurfaceSynchronization,UseVideoCaptureApiForDevToolsSnapshots --disable-gpu-compositing --service-pipe-token=--lang=en-US --webengine-schemes=qrc:sLV --num-raster-threads=4 --enable-main-frame-before-activation --service-request-channel-token=  --renderer-client-id=3
10030 ttys000    0:00.00 grep emulator
  1. 第一列(左)是您要查找的进程ID(PID)。

  2. 找到第一个PID(在上面的示例中为6617)。

  3. 强制杀死该过程:

kill -9 PID

就我而言,命令是:

kill -9 6617
  1. 通常,杀死第一个进程足以停止模拟器,但是,如果这样做不起作用,请尝试也杀死其他进程。

8

为什么不做

adb reboot bootloader

这最终对我
有用

真!我以为我们无法通过'reboot'命令重新启动android仿真器,您正在使用哪个版本?
里达·莎玛斯妮

7

有时命令

adb -s emulator-5554 emu kill

由于未知原因,它无法在我的CI服务器或台式机上运行。我认为在Windows上可以终止qemu进程,就像

Taskkill /IM qemu-system-x86_64.exe /F /T

2
Taskkill命令对我有用。谢谢。令人难以置信的是,我们仍然必须处理此类问题。
Panos Gr

我尝试了所有解决方案,这是唯一对我
有用的

7

我可以用以下方法关闭它:

adb shell reboot -p

1

没有一个解决方案对我有用。我必须采用包括身份验证在内的telnet方式:

AUTH=$(cat "$HOME/.emulator_console_auth_token")

expect << EOF
spawn telnet localhost 5554
expect "OK"
send   "auth $AUTH\r"
expect "OK"
send   "kill\r"
expect "OK"
send   "exit\r"
EOF

完整脚本可以从https://github.com/kullo/android-emulator-tools获得免费许可


更新:看起来这仍然不能可靠地关闭控制台和ADB端口(例如5554,5555)


1

我使用这种单行代码,将其分成几行以提高可读性:

adb devices |
 perl -nle 'print $1 if /emulator-(\d+).device$/' |
 xargs -t -l1 -i bash -c "
   ( echo auth $(cat $HOME/.emulator_console_auth_token) ;
     echo kill ;
     yes ) |
   telnet localhost {}"

1

如果您不想知道的设备序列号adb -s emulator-5554 emu kill,则可以使用adb -e emu kill它杀死单个仿真器。如果一次运行多个仿真器,这不会杀死任何东西,但是对于自动化(在启动和停止单个仿真器进行测试时)很有用。



0

连接的设备列表仿真器-5584主机仿真器-5580主机仿真器-5576主机仿真器-5572主机仿真器-5568主机仿真器-5564主机仿真器-5560主机

C:\ Users \ Administrator> adb -s emulator-5584 emu kill错误:无法连接到TCP端口5584:无法连接到127.0.0.1:5584:无法建立连接,因为目标计算机主动拒绝了它。(10061)

注意:模拟器的gui尚未运行,但仍在显示

解:

adb kill-server

使用以下命令启动仿真器:

emulator.exe -netdelay none -netspeed full -avd Nexus_5X_API_19

我希望这能帮到您!


0

要自动执行此操作,可以使用任何可以将字符串发送到套接字的脚本或应用程序。我个人喜欢cygwin下的nc(netcat)。正如我之前所说,我是这样使用它的:

$ echo kill | nc -w 2 localhost 5554

(这意味着将“ kill”字符串发送到本地主机上的端口5554,并在2秒后终止netcat。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.