此问题与How to shut down Android emulator via command line相同。
然而,在尝试第一个回答adb emu kill
的建议解决方案后,我没有证明是成功的。
我正在为Android应用程序自动化单元测试。我的bash脚本在无头机器上运行。它使用android create avd
创建一个Android设备,并使用emulator
属性执行-no-window
。然后它编译测试项目,使用adb
连接到模拟器,安装项目并执行我的测试。一切正常。
现在我需要终止模拟器进程,就像引用的帖子一样,我只能使用kill -9
执行此操作。
Google教程Managing AVDs from the Command Line仅提及如何在GUI环境中停止模拟器。
感谢任何帮助。
答案 0 :(得分:105)
也许尝试使用adb kill-server
它应该适合你吗?
或
adb -s emulator-5554 emu kill
,其中emulator-5554
是模拟器名称。
对于Ubuntu 用户,我找到了一个很好的命令来停止所有正在运行的模拟器(感谢@uwe)
adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done
答案 1 :(得分:23)
要停止所有正在运行的模拟器,我们使用以下命令:
adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done
答案 2 :(得分:9)
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
第一列(左)是您要查找的进程ID(PID)。
找到第一个PID(在上面的示例中为6617)。
强制终止该进程:
kill -9 PID
在我的情况下,命令是:
kill -9 6617
答案 3 :(得分:7)
另一个答案对我不起作用(在Windows 7上)。但这很有效:
telnet localhost 5554
kill
答案 4 :(得分:6)
Why not just do
adb reboot bootloader
答案 5 :(得分:3)
如果
adb kill-server
不起作用。使用:
adb emu kill
这将杀死所有模拟器
如果存在多个模拟器,则使用:
adb -s * emu kill
答案 6 :(得分:2)
有时是命令
<?xml version='1.0' encoding='UTF-8'?>
<Audit
xmlns="http://www.alfresco.org/repo/audit/model/3.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.alfresco.org/repo/audit/model/3.2 alfresco-audit-3.2.xsd"
>
<DataExtractors>
<DataExtractor name="simpleValue" registeredName="auditModel.extractor.simpleValue"/>
</DataExtractors>
<DataGenerators>
<DataGenerator name="currentUser" registeredName="auditModel.generator.user"/>
</DataGenerators>
<PathMappings>
<PathMap source="/alfresco-api/pre/AuthorityService/deleteAuthority" target="/deleteAuthority"/>
</PathMappings>
<Application name="DeleteAuthority" key="deleteAuthority">
<AuditPath key="deleteAuthority">
<RecordValue key="authority" dataExtractor="simpleValue" dataSource="/deleteAuthority/args/name" dataTrigger="/deleteAuthority/args/name"/>
<GenerateValue key="deletingUser" dataGenerator="currentUser"/>
</AuditPath>
</Application>
</Audit>
由于未知原因,无法在我的CI服务器或台式机上运行。 我认为在Windows上可以终止qemu进程,就像
adb -s emulator-5554 emu kill
答案 7 :(得分: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)
答案 8 :(得分: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 {}"
答案 9 :(得分:1)
我可以使用以下方法将其关闭:
adb shell reboot -p
答案 10 :(得分:1)
如果您不想知道adb -s emulator-5554 emu kill
的设备序列号,则可以使用adb -e emu kill
杀死单个仿真器。如果您一次运行多个仿真器,这不会杀死任何东西,但是对于自动化,在启动和停止单个仿真器进行测试时,这很有用。
答案 11 :(得分:0)
adb kill-server将终止所有模拟器并重新启动服务器。
答案 12 :(得分:0)
附加的设备列表 模拟器-5584主机 模拟器-5580主机 模拟器-5576主机 模拟器-5572主机 模拟器-5568主机 模拟器-5564主机 模拟器-5560主机
C:\ Users \ Administrator&gt; 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
我希望这会对你有所帮助!
答案 13 :(得分:0)
要自动执行此操作,您可以使用任何可以将字符串发送到套接字的脚本或应用程序。我个人喜欢cygwin下的nc(netcat)。正如我之前所说,我这样使用它:
$ echo kill | nc -w 2 localhost 5554
(这意味着发送&#34; kill&#34;字符串到localhost上的端口5554,并在2秒后终止netcat。)