web-dev-qa-db-ja.com

シャットダウンする方法Androidエミュレーターをコマンドラインから

エミュレータをコマンドプロンプトから正常に停止できません。

Linux Ubuntu 10.04バージョン(64ビット)を使用しており、Android SDKバージョンは2.3です。

スナップショットを使用してエミュレータを起動しました。次に、実行中のエミュレータのインスタンスを正常にシャットダウンすることが私の関心事です。エミュレータをシャットダウンするkill -9(エミュレータの実行中のプロセスID)を試しましたが、次回はスナップショットが破損したため起動しません。エミュレータの強制シャットダウンを回避するために私を助けてください。

それを修正する方法はありますか?

25
Sam

kill -9を無差別に使用しないでください。これは非常に悪い習慣です。

正しいコマンドは

 $ adb emu kill

あるいは、最近のadbが変更されるまでは、正しいコマンドでしたと言ったほうがいいでしょう。認証を追加するのを忘れたようです。

最新(2016年6月現在)の最新のadbバージョンは

$ adb version
Android Debug Bridge version 1.0.36
Revision 0a04cdc4a62f-Android

そしてあなたがしようとすると

$ adb emu kill

何も起こらず、これが理由です

...
connect(3, {sa_family=AF_INET, sin_port=htons(5554), 
sin_addr=inet_addr("127.0.0.1")}, 16) = 0
write(3, "kill\nquit\n", 10)            = 10
read(3, "\377\373\1", 8192)             = 3
read(3, "\377\373\3\377\373\0\377\375\0", 8192) = 9
read(3, "Android Console: Authentication required\r\nAndroid Console: type 'auth <auth_token>' to authenticate\r\nAndroid Console: you can find your <auth_token> in \r\n'/home/diego/.emulator_console_auth_token'\r\nOK\r\n", 8192) = 202
read(3, "k\33[K", 8192)                 = 4
read(3, "\33[Dki\33[K", 8192)           = 8
read(3, "\33[D\33[Dkil\33[K\33[D\33[D\33[Dkill\33[K", 8192) = 28
read(3, "\r\nKO: unknown command, try 'help'\r\n", 8192) = 35
read(3, "q\33[K\33[Dqu\33[K", 8192)     = 12
read(3, "\33[D\33[Dqui\33[K\33[D\33[D\33[Dquit\33[K", 8192) = 28
read(3, "\r\n", 8192)                   = 2
read(3, "", 8192)                       = 0
close(3)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

次に、別のソリューションが必要です。

前のコマンドが機能しない場合(一部のユーザーがWindowsについて報告したように)、次のコマンドを試すことができます(次のコマンドで5554はエミュレーターが使用するポートです)。

トークンファイル(~/.emulator_console_auth_token)の内容をクリップボードにコピーして、Telnetセッション中に貼り付けられるようにします。

$ telnet localhost 5554

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: Authentication required
Android Console: type 'auth <auth_token>' to authenticate
Android Console: you can find your <auth_token> in 
'/home/user/.emulator_console_auth_token'
OK
auth <YOUR_TOKEN_HERE>
Android Console: type 'help' for a list of commands
OK
Android console command help:

    help|h|?         print a list of commands
    crash            crash the emulator instance
    kill             kill the emulator instance
    quit|exit        quit control session
    redir            manage port redirections
    power            power related commands
    event            simulate hardware events
    avd              control virtual device execution
    finger           manage emulator fingerprint
    geo              Geo-location commands
    sms              SMS related commands
    cdma             CDMA related commands
    gsm              GSM related commands
    rotate           rotate the screen by 90 degrees

try 'help <command>' for command-specific help
OK

次に、コマンドプロンプトでkillと入力するだけです。

kill
OK: killing emulator, bye bye
Connection closed by foreign Host.

エミュレータが終了します。

しかし、待ってください。もっと良い方法があるはずです。そして実際にあります!

この Gist は、認証トークンを毎回切り取って貼り付ける必要がなく、 expect を使用して自動化されたソリューションを提供します。

お役に立てば幸いです。

58

私はubuntuで、エミュレータが新しいプロセスを継続的に開く問題を抱えていました。エミュレータを閉じることはできず、応答しませんでした。

htopを使用しました

Htopでの手順:

  1. フィルターするF4。
  2. 「avd」のフィルター。
  3. ツリーのF5。
  4. 親プロセスを見つけてクリックします。
  5. キルメニューを上げるF9。
  6. 信号9を選択して入力します。
0
Shannanigans

Ubuntu 16-04では、ADBバージョン1.0.32を使用して、DockerコンテナーでAndroid 4.4(API 19))のエミュレーターを実行しています。公開されているポートは、コンソール用の30004および30005です。 ADBの場合。

adb connect 0.0.0.0:30005を実行して接続できます。

エミュレータを強制終了するには、adb -s emulator-30004 emu killを使用する必要があります。0.0.0.0:30005を使用すると、error: no emulator detectedが得られます。

0
user276648