Android命令行停止模拟器

154

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

然而,尝试了第一个答案中建议的解决方案adb emu kill对我来说并不成功。

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

现在我需要终止模拟器进程,就像参考帖子一样,我只能使用kill -9来做到这一点。

Google教程从命令行管理AVDs仅提到如何在GUI环境中停止模拟器。

任何帮助都将不胜感激。

18个回答

335

也许adb kill-server对您有帮助?

或者使用adb -s emulator-5544 emu kill,其中emulator-5544是模拟器名称。

对于Linux用户,可以使用以下命令:

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


6
adb kill-server会停止adb,但不会停止模拟器进程。而emu kill语句总是返回模拟器未找到。 - jsjrobotics
7
目前可用的最新SDK在OSX上都无法运行。 - behelit
17
adb -s emulator-5554 emu kill 能够关闭模拟器,但该命令不会终止并会永久阻塞 :/。 - Simon Warta
5
如果有人被这个搞糊涂了,你可以使用“adb devices”命令找到模拟器的名称。 - nhouser9
1
小笔误:) 应该是 emulator-5554 - Daniel Danielecki
显示剩余4条评论

77

适用于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 PID

在我的情况下,命令是:

kill 6617
  1. 通常,杀死第一个进程就足以停止模拟器,但如果这样不起作用,可以尝试:

    5.1. 杀死其他进程。

    5.2 用-9进行强制杀死:

kill -9 PID

1
不要使用“-9”来关闭模拟器,正常的“kill”命令就足够了。使用“-9”会强制终止进程并跳过所有清理工作,可能会导致问题。 - V.S.
6
仅使用 kill 命令无法杀死该进程,需要使用 kill -9 命令。 - Javad
运行kill命令对我没有起作用,可能我没有找到要终止的正确进程,或者我错过了强制(-9)的步骤。然后我打开了macOS活动监视器,列出了所有进程,我的模拟器位于顶部。我双击它并强制退出。最终终于解决了问题。 - francoiscabrol

54

为了停止所有正在运行的模拟器,我们使用以下命令:

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

然后,将其设置为bash别名 ;) - undefined

30

如果

 adb kill-server 

不起作用。请使用:

 adb emu kill

这将会杀掉所有模拟器。

如果有多个模拟器存在,请使用:

adb -s * emu kill

21
有时候命令
adb -s emulator-5554 emu kill

由于未知原因,我的CI服务器和桌面电脑上无法正常运行。我认为在Windows上,像qemu这样的进程可以被终止。

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

2
这对我在Windows 11上非常有效。您只需要指定此命令必须在管理员命令提示符中执行即可。非常感谢。 - ZipGenius

15

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

adb shell reboot -p

-p 选项是做什么的?关机而不仅仅是重新启动?有文档可以参考吗?谢谢! - Joshua Pinter
1
我在其他地方发现它只是代表“power”。语法奇怪但它运行良好。相比于“kill”和“emu kill”似乎更优雅。 - Joshua Pinter

9

另一个答案在我的电脑上(Windows 7)不起作用。但是这个方法有效:

telnet localhost 5554
kill

1
但在启用 Telnet 功能之前,需要通过控制面板 > 程序和功能 > 打开或关闭 Windows 功能 > Telnet 客户端来激活它。 - Ayaz Alifov
kill 在运行 Android 9 及之前版本的模拟器中似乎不是一个命令。 - Vanquish46

9
为什么不直接这样做?
adb reboot bootloader

1
最终这对我起作用了,可能是在调用上述其他命令之后。 - CularBytes
真的吗!我以为我们不能通过“重启”命令重新启动Android模拟器。你使用的是哪个版本? - Rida Shamasneh

9

要获取您的设备名称,请在Android Studio终端上运行此命令

adb devices

在获取设备名称后,使用此命令关闭应用程序

adb -s emulator-5554 emu kill

where

emulator-5554

是您的设备名称


2
如果您不想知道您的设备的序列名称,就可以使用adb -e emu kill来关闭单个模拟器,而不是使用adb -s emulator-5554 emu kill。如果您同时运行多个模拟器,则此命令不会关闭任何内容,但在为测试启动和停止单个模拟器的自动化中非常有用。请注意保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接