【问题标题】:Android Stop Emulator from Command LineAndroid 从命令行停止模拟器
【发布时间】:2013-12-07 22:53:45
【问题描述】:

此问题与How to shut down Android emulator via command line 相同。

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

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

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

Google 教程Managing AVDs from the Command Line 仅提及如何在 GUI 环境中停止模拟器。

感谢任何帮助。

【问题讨论】:

    标签: android android-emulator


    【解决方案1】:

    adb kill-server 可能对你有帮助吗?

    adb -s emulator-5554 emu kill,其中emulator-5544 - 模拟器名称。

    对于 Linux 用户,它将是

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

    【讨论】:

    • adb kill-server 停止 adb 但不停止模拟器进程。并且 emu kill 语句总是返回 emulator not found
    • 没有找到模拟器?永远不要相信这一点。如果你启动模拟器 - 你有模拟器。没有?尝试杀死另一个端口的模拟器。端口数包含在上面的链接中。
    • 目前在 osx 上都没有使用最新的可用 sdks
    • adb -s emulator-5554 emu kill 确实关闭了模拟器,但命令不会终止并永远阻塞:/
    • 对于任何对此感到困惑的人,您可以使用adb devices找到模拟器名称。
    【解决方案2】:

    这个脚本可以帮助你一次杀死所有模拟器:

    1. 过滤模拟器(因为您可以混合使用物理和鸸鹋)
    2. 按 ADB id 杀死所有鸸

    这个解决方案的缺点:如果你的鸸鹋只是“卡住”了,你不能用 adb 命令杀死它,它需要进程杀死。但这种情况非常罕见。

    while [ "`adb devices | grep -Eoh \"emulator-\d{0,4}\" | wc -l | tr -d ' '`" != "0" ]; do 
        echo "Connected emulators:"
        adb devices | grep -Eoh "emulator-\d{0,4}"
    
        for emulator in $(adb devices | grep -Eoh "emulator-\d{0,4}")
        do
            echo "Killing the emulator: $emulator"
            adb -s "$emulator" emu kill | true
        done
    
        sleep 10; 
    done
    echo "All emus has been killed"
    

    【讨论】:

      【解决方案3】:

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

      更新: 感谢@V.S.建议:将kill -9改为kill

      【讨论】:

      • 不要使用 -9 杀死模拟器。正常kill 就足够了。 -9 使进程崩溃并跳过所有清理,这可能会导致问题。
      【解决方案4】:

      如果

       adb kill-server 
      

      不起作用。使用:

       adb emu kill
      

      这会杀死所有的模拟器

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

      adb -s * emu kill
      

      【讨论】:

        【解决方案5】:

        如果您不想知道adb -s emulator-5554 emu kill 的设备序列名,那么您可以使用adb -e emu kill 杀死单个模拟器。如果您同时运行多个模拟器,这不会杀死任何东西,但它对于您启动和停止单个模拟器进行测试的自动化很有用。

        【讨论】:

          【解决方案6】:

          我可以关闭它:

          adb shell reboot -p
          

          【讨论】:

            【解决方案7】:

            有时是命令

            adb -s emulator-5554 emu kill
            

            由于未知原因,无法在我的 CI 服务器或桌面上运行。 我觉得在windows上杀掉qemu的进程就可以了,就像

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

            【讨论】:

              【解决方案8】:

              我使用这个单行,为了便于阅读,分成几行:

              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】:

                没有一个解决方案对我有用。我不得不采用包括身份验证在内的 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)

                【讨论】:

                  【解决方案10】:

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

                  $ echo kill | nc -w 2 localhost 5554
                  

                  (即向localhost的5554端口发送“kill”字符串,2秒后终止netcat。)

                  【讨论】:

                    【解决方案11】:

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

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

                    【讨论】:

                      【解决方案12】:

                      附加设备列表 模拟器 5584 主机 模拟器 5580 主机 模拟器 5576 主机 模拟器 5572 主机 模拟器 5568 主机 模拟器 5564 主机 emulator-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
                      

                      希望对你有帮助!

                      【讨论】:

                        【解决方案13】:

                        adb kill-server 将杀死所有模拟器并重新启动服务器干净。

                        【讨论】:

                        • 不会为我杀死或重新启动任何模拟器。
                        • adb kill-server 杀死服务器,它不会杀死模拟器。
                        • 它在没有连接 USB 电缆的情况下对我有用。谢谢!
                        【解决方案14】:

                        为什么不这样做

                        adb reboot bootloader
                        

                        【讨论】:

                        • 这最终对我有用,可能是在调用上述其他命令之后
                        • 真的!我以为我们无法通过'reboot'命令重新启动android模拟器你使用的是哪个版本?
                        【解决方案15】:

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

                        telnet localhost 5554
                        kill
                        

                        【讨论】:

                        • 但在 Telnet 功能需要通过控制面板 > 程序和功能 > 打开或关闭 Windows 功能 > Telnet 客户端激活之前
                        • kill 似乎不是运行 Android 9 的模拟器中的命令,也可能更早
                        猜你喜欢
                        • 2018-07-27
                        • 1970-01-01
                        • 2017-09-23
                        • 2011-06-25
                        • 2013-02-27
                        • 2019-07-06
                        • 1970-01-01
                        • 2013-12-18
                        • 1970-01-01
                        相关资源
                        最近更新 更多