从命令行Android停止模拟器

时间:2013-11-22 22:06:45

标签: android android-emulator

此问题与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环境中停止模拟器。

感谢任何帮助。

14 个答案:

答案 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)

对于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. 通常,杀死第一个进程足以停止模拟器,但是,如果这样不起作用,请尝试也杀死其他进程。

答案 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。)