エミュレータのコンソール コマンドを送信する

実行中の各仮想デバイスでは、エミュレートしたデバイス環境に対してクエリを実行したり、制御したりできるコンソールを利用できます。たとえば、コンソールを使用することで、エミュレータでアプリを実行している最中に、ポート リダイレクト、ネットワークの特性、電話のイベントを管理できます。

次のコマンドを実行するには、エミュレータがすでに実行されている必要があります。エミュレータの実行の詳細については、Android Emulator でアプリを実行すると、コマンドラインからエミュレータを起動するを参照してください。

コンソール セッションを開始、停止する

コンソールにアクセスしてコマンドを入力するには、ターミナル ウィンドウから telnet を使用してコンソール ポートに接続し、認証トークンを入力します。コンソールに [OK] が表示されるたびに、コマンドの受け付けが可能になります。一般的なプロンプトはありません。

実行中の仮想デバイスのコンソールに接続するには:

  1. ターミナル ウィンドウを開いて、以下のコマンドを入力します。
  2. telnet localhost console-port

    エミュレータ ウィンドウのタイトルには、コンソール ポート番号が表示されます。コンソール ポート番号 5554 を使用するエミュレータの場合、ウィンドウ タイトルは Nexus_5X_API_23:5554 になります。また、adb devices コマンドを使用することで、実行中の仮想デバイスとそのコンソール ポート番号のリストを出力できます。詳細については、エミュレータ/デバイス インスタンスのクエリをご覧ください。

    注: エミュレータはポート番号 5554~5585 で接続をリッスンし、localhost からの接続のみを受け入れます。

  3. コンソールに OK が表示されたら auth auth_token コマンドを入力します。
  4. コンソール コマンドを入力するには、エミュレータ コンソールで認証が必要です。auth_token は、ホーム ディレクトリにある .emulator_console_auth_token ファイルの内容と一致する必要があります。

    このファイルが存在しない場合、telnet localhost console-port コマンドを入力すると、ランダムに生成された認証トークンを含むファイルが作成されます。認証を無効にするには、トークンを .emulator_console_auth_token ファイルから削除します。ファイルが存在しない場合は空のファイルを作成します。

  5. コンソールに接続したら、コンソール コマンドを入力します。
  6. help」、「help command」、または「help-verbose」と入力すると、コンソール コマンドのリストが表示され、特定のコマンドを確認できます。

  7. コンソール セッションを終了するには、「quit」または「exit」と入力します。

セッションの例を以下に示します。

    $ telnet localhost 5554
    Trying ::1...
    telnet: connect to address ::1: Connection refused
    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
    '/Users/me/.emulator_console_auth_token'
    OK
    auth 123456789ABCdefZ
    Android Console: type 'help' for a list of commands
    OK
    help-verbose
    Android console command help:
        help|h|?         print a list of commands
        help-verbose     print a list of commands with descriptions
        ping             check if the emulator is alive
        automation       manage emulator automation
        event            simulate hardware events
        geo              Geo-location commands
        gsm              GSM related commands
        cdma             CDMA related commands
        crash            crash the emulator instance
        crash-on-exit    simulate crash on exit for the emulator instance
        kill             kill the emulator instance
        restart          restart the emulator instance
        network          manage network settings
        power            power related commands
        quit|exit        quit control session
        redir            manage port redirections
        sms              SMS related commands
        avd              control virtual device execution
        qemu             QEMU-specific commands
        sensor           manage emulator sensors
        physics          manage physical model
        finger           manage emulator finger print
        debug            control the emulator debug output tags
        rotate           rotate the screen clockwise by 90 degrees
        screenrecord     Records the emulator's display
        fold             fold the device
        unfold           unfold the device
        multidisplay     configure the multi-display

    try 'help <command>' for command-specific help
    OK
    exit
    Connection closed by foreign host.
    

エミュレータ コマンド リファレンス

次の表に、エミュレータのコンソール コマンドと、そのパラメータおよび値を示します。

表 1. エミュレータのコンソール コマンド

一般的なコマンド 説明
avd {stop|start|status|name} 以下を指定することで、仮想デバイスのクエリ、制御、管理を実行できます。
  • stop: デバイスの実行を停止します。
  • start: デバイスの実行を開始します。
  • status: 仮想デバイスのステータスについてクエリを行います。ステータスには、running または stopped があります。
  • name: 仮想デバイス名のクエリを行います。
avd snapshot {list|save name|load name|delete name} 以下を指定することで、スナップショットでデバイスの状態を保存したり、状態を復元したりできます。
  • list: 保存されたすべてのスナップショットをリストします。
  • save name: スナップショットを name として保存します。
  • load name: 指定した名前のスナップショットを読み込みます。
  • delete name: 指定した名前のスナップショットを削除します。

次の例では、firstactivitysnapshot という名前でスナップショットを保存しています。


avd snapshot save firstactivitysnapshot
fold デバイスを折りたたんで、小さい画面構成を表示します(デバイスが折りたたみ式で、現在開かれている場合)。
unfold デバイスを開いて、大きな画面構成を表示します(デバイスが折りたたみ式で、現在閉じられている場合)。
kill 仮想デバイスを終了します。
ping 仮想デバイスが実行されているかどうかを確認します。
rotate AVD を反時計回りに 45 度ずつ回転させます。
エミュレータのクラッシュ 説明
crash アプリの実行中にエミュレータをクラッシュさせます。
crash-on-exit アプリの終了時にエミュレータをクラッシュさせます。
デバッグタグ 説明
debug tags ...

エミュレータの特定部分からのデバッグ メッセージを有効または無効にします。tags パラメータは、emulator -help-debug-tags を実行したときに表示されるデバッグタグのリストに存在する値である必要があります。-help-debug-tags オプションの詳細については、よく使用されるエミュレータ オプションをご覧ください。

次の例では、radio タグを有効にしています。


debug radio
ポート リダイレクト 説明
redir list 現在のポート リダイレクトをリストします。
redir add protocol:host-port:guest-port 以下を指定することで、新しいポート リダイレクトを追加できます。
  • protocol: tcp または udp のどちらかを指定する必要があります。
  • host-port: ホスト上で開くポート番号。
  • guest-port: データのルーティング先となる、エミュレータ上のポート番号。
redir del protocol:host-port ポート リダイレクトを削除します。
  • protocol: tcp または udp のどちらかを指定する必要があります。
  • host-port: ホスト上で開くポート番号。
位置情報 説明
エミュレータに GPS 修正を送信して、エミュレータ内で実行されているアプリに報告する位置情報を設定します。

仮想デバイスが実行されるとすぐに geo コマンドを発行できます。エミュレータは、仮のロケーション プロバイダを作成して、入力した位置情報を設定します。このプロバイダは、アプリによって設定されたロケーション リスナーに応答し、LocationManager への位置情報の提供も行います。すべてのアプリは、LocationManager.getLastKnownLocation("gps") を呼び出すことで、ロケーション マネージャーにクエリを行い、エミュレートしたデバイスの現在の GPS 修正を取得できます。

geo fix longitude latitude satellites [altitude] エミュレータにシンプルな GPS 修正を送信します。longitudelatitude を 10 進数で指定します。1~12 までの数字を使用して、位置の決定に使用する satellites の数と、altitude(メートル単位)を指定します。
geo nmea sentence エミュレートした GPS モデムから送信されたかのように、エミュレートしたデバイスに NMEA 0183 文を送信します。sentence は「$GP」で始めます。現在、「$GPGGA」および「$GPRCM」文のみがサポートされています。次の例は、GPS 受信機の時刻、位置、修正データを取得する GPGGA(全地球測位システムの修正データ)文です。

geo nmea $GPGGA ,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx
疑似ハードウェア イベント 説明
event types すべての疑似イベントタイプをリストします。コードを持つイベントの場合、コード番号は右側の括弧内にリストされます。


    event types
    event &lttype&gt can be an integer or one of the following aliases:
        EV_SYN
        EV_KEY    (405 code aliases)
        EV_REL    (2 code aliases)
        EV_ABS    (27 code aliases)
        EV_MSC
        EV_SW     (4 code aliases)
        EV_LED
        EV_SND
        EV_REP
        EV_FF
        EV_PWR
        EV_FF_STATUS
        EV_MAX
    OK
            

event send types [types ...] 1 つ以上の疑似イベントタイプを送信します。
event codes type 指定した疑似イベントタイプのイベントコードをリストします。
event send type[:code]:[value] [...] オプションのコードとコード値を持つ、1 つ以上の疑似イベントを送信します。

エミュレータのボタンを手動で押したときに送信されるイベントを正確に把握するには、adb コマンドを使用します。

以下は、電源ボタンを押したときに生成されるイベントです。


    adb shell getevent -lt

    /dev/input/event12: EV_KEY       KEY_POWER            DOWN
    /dev/input/event12: EV_SYN       SYN_REPORT           00000000
    /dev/input/event12: EV_KEY       KEY_POWER            UP
    /dev/input/event12: EV_SYN       SYN_REPORT           00000000
          
このケースでは、EV_KEY イベントである keydown と keyup の 2 つを送信するだけで電源ボタンの長押しをシミュレートできました。

    event send EV_KEY:KEY_POWER:0
    OK
    event send EV_KEY:KEY_POWER:1
    OK
          

event text message キー押下をシミュレートする文字列を送信します。メッセージは UTF-8 文字列にする必要があります。Unicode の場合、現在のデバイス キーボードに従って逆マッピングされ、サポートされていない文字は警告もなく破棄されます。
エミュレータがアプリに報告する電源状態を制御する 説明
power display 電池と充電器の状態を表示します。
power ac {on|off} AC 充電の状態を on または off に設定します。
power status {unknown|charging|discharging|not-charging|full} 電池の状態を指定どおりに変更します。
power present {true|false} 電池の有無状態を設定します。
power health {unknown|good|overheat|dead|overvoltage|failure} 電池の状態を設定します。
power capacity percent 電池残量状態を 0〜100(パーセント)で設定します。
ネットワーク接続の状態 説明
network status ネットワークの状態、現在の遅延、速度の特性を確認します。
network delay latency エミュレートしたネットワークのレイテンシを変更します。

エミュレータにより、ネットワークのさまざまなレイテンシ レベルをシミュレートできるため、アプリが実行される実際の一般的な条件により近い環境でアプリをテストできます。エミュレータの起動時にレイテンシのレベルまたは範囲を設定するか、アプリの実行中にエミュレータでコンソールを使用してレイテンシを変更できます。

エミュレータの起動時にレイテンシを設定するには、-netdelay エミュレータ オプションを使用して、サポートされている latency 値(以下に記載されているネットワーク レイテンシの形式のリストを参照)を指定します。次に例を示します。


emulator -netdelay gprs
    emulator -netdelay 40,100

エミュレータの実行中にネットワークの遅延を変更するには、コンソールに接続し、netdelay コマンドを使用して、以下に記載されているネットワーク レイテンシの形式のリストからサポートされている latency 値を指定します。


network delay gprs
    network delay 40 100

ネットワーク レイテンシの形式:

ネットワーク レイテンシは次のいずれかの形式で指定します(数値単位はミリ秒)。

  • gprs: GPRS、150~550 のレイテンシ範囲を使用します。
  • edge: EDGE / EGPRS、80~400 のレイテンシ遅延範囲を使用します。
  • umts: UMTS / 3G、35~200 のレイテンシ範囲を使用します。
  • none: レイテンシなし。
  • num: 指定されたレイテンシをミリ秒単位でエミュレートします。
  • min:max: 指定されたレイテンシ範囲をエミュレートします。
network speed speed エミュレータを使用すると、さまざまなネットワーク転送速度をシミュレートできます。

エミュレータの起動時に転送速度または範囲を設定するか、エミュレータでアプリの実行中にコンソールを使用して転送速度を変更できます。

エミュレータの起動時にネットワーク速度を設定するには、-netspeed エミュレータ オプションを使用して、サポートされている speed 値(以下に記載されているネットワーク速度の形式のリストを参照)を指定します。次に例を示します。


    emulator -netspeed gsm @Pixel_API_26
    emulator -netspeed 14.4,80 @Pixel_API_26
    

エミュレータの実行中にネットワーク速度を変更するには、コンソールに接続し、network speed コマンドを使用して、以下に記載されているネットワーク速度の形式のリストからサポートされている speed 値を指定します。


network speed 14.4 80

ネットワーク速度の形式:

ネットワーク speed は次のいずれかの形式で指定します(数値単位はキロビット /秒)。

  • gsm: GSM / CSD、上り 14.4、下り 14.4 の速度を使用します。
  • hscsd: HSCSD、上り 14.4、下り 43.2 の速度を使用します。
  • gprs: GPRS、上り 40.0、下り 80.0 の速度を使用します。
  • edge: EDGE / EGPRS、上り 118.4、下り 236.8 の速度を使用します。
  • umts: UMTS / 3G、上り 128.0、下り 1920 の速度を使用します。
  • hsdpa: HSDPA、上り 348.0、下り 14400.0 の速度を使用します。
  • lte: LTE、上り 58,000、下り 173,000 の速度を使用します。
  • evdo: EVDO、上り 75,000 と下り 280,000 の速度を使用します。
  • full: 速度は無制限ですが、コンピュータの接続速度に依存します。
  • num: 上りと下りの両方に使用される正確な速度をキロビット/秒で設定します。
  • up:down: 上りと下りそれぞれの正確な速度をキロビット/秒で設定します。
network capture {start|stop} file パケットをファイルに送信します。パラメータとパラメータ値の説明を以下に示します。
  • start file: 指定されたファイルへのパケットの送信を開始します。
  • stop file: 指定されたファイルへのパケットの送信を停止します。
電話のエミュレーション 説明
Android emulator には、エミュレータで電話機能をシミュレートできる独自の GSM および CDMA をエミュレートしたモデムが含まれています。たとえば、GSM を使用すると、電話の着信のシミュレートや、データ接続の確立と終了が可能です。CDMA を使用する場合は、サブスクリプション ソースと優先ローミング リストを指定します。Android システムは、実際の呼び出しとまったく同じようにシミュレートされた通話を処理します。エミュレータは通話音声をサポートしていません。
gsm {call|accept|cancel|busy} phonenumber gsm パラメータは次のとおりです。
  • call: phonenumber からの電話の着信をシミュレートします。
  • accept: phonenumber からの電話の着信を受け付けて、通話状態を active に変更します。現在の状態が waiting または held の場合にのみ、通話状態を active に変更できます。
  • cancel: phonenumber との電話の着信または発信を終了します。
  • busy: phonenumber への電話の発信を終了し、通話状態を busy に変更します。現在の状態が waiting の場合にのみ、通話状態を busy に変更できます。
gsm {data|voice} state 次のように、data state コマンドは GPRS データ接続の状態を変更し、data voice state は GPRS 音声接続の状態を変更します。
  • unregistered: 利用可能なネットワークがありません。
  • home: ローカル ネットワークに接続中、非ローミング。
  • roaming: ローミング ネットワークに接続中。
  • searching: ネットワークの検索中。
  • denied: 緊急通報のみ。
  • off: unregistered と同じ。
  • on: home と同じ。
gsm hold 通話の状態を hold に変更します。現在の状態が active または waiting の場合にのみ、通話状態を hold に変更できます。
gsm list すべての電話の着信および発信とその状態をリストします。
gsm status 現在の GSM 音声 / データの状態を報告します。値については、voice および data コマンドの説明をご覧ください。
gsm signal {rssi|ber} 次の 15 秒間の更新における、報告される信号強度(rssi)とビットエラー率(ber)を変更します。パラメータとその値の説明を以下に示します。
  • rssi 範囲は 0~31 で、不明の場合は 99 です。
  • ber 範囲は 0〜7 で、不明の場合は 99 です。
gsm signal-profile num 信号強度プロファイルを設定します。0〜4 の数値を入力します。
cdma ssource source source: 現在の CDMA 登録元を設定します。source は、以下のように、CDMA 通信事業者の加入者とその値が含まれるネットワークベースのホワイトリストです。
  • nv: 不揮発性 RAM から登録を読み取ります。
  • ruim: Removable User Identity Module(RUIM)から登録を読み取ります。
cdma prl_version version 現在の優先ローミング リスト(PRL)バージョンをダンプします。バージョン番号は、システムの選択および取得プロセス中に使用される情報が含まれる、PRL データベース用のものです。
エミュレータでセンサーを管理する 説明
これらのコマンドは、AVD で使用可能なセンサーに関連します。sensor コマンドを使用する以外に、[Accelerometer] タブと [Additional sensors] タブの [Virtual sensors] 画面で、エミュレータの設定を表示および調整できます。詳細については、拡張コントロール、設定、ヘルプの使用をご覧ください。
sensor status すべてのセンサーとそのステータスをリストします。sensor status コマンドの出力例を以下に示します。
sensor get sensor-name sensor-name の設定を取得します。次の例では、加速度センサーの値を取得します。

    sensor get acceleration
    acceleration = 2.23517e-07:9.77631:0.812348
    

コロン(:)で区切られた acceleration 値は、拡張コントロール、設定、ヘルプの操作で説明されている仮想センサーの x、y、z 座標を参照します。

sensor set sensor-name value-x:value-y:value-z sensor-name 値を設定します。次の例では、加速度センサーを、コロンで区切られた x、y、z 値に設定しています。詳細については、拡張コントロール、設定、ヘルプの使用をご覧ください。

sensor set acceleration 2.23517e-07:9.77631:0.812348
SMS エミュレーション 説明
sms send sender-phone-number textmessage エミュレートされた着信 SMS を生成します。パラメータとその値の説明を以下に示します。
  • sender-phone-number: 任意の数値文字列が含まれます。
  • textmessage: SMS メッセージ。

次の例では、メッセージ「hi there」を電話番号 4085555555 に送信しています。


sms send 4085555555 hi there

コンソールは、SMS メッセージを Android フレームワークに転送します。Android フレームワークは、エミュレータのアプリ(メッセージ アプリなど)にメッセージを渡し、そのアプリが SMS を処理します。10 桁の番号を渡すと、アプリはその番号を電話番号の形式に合わせます。数値文字列が 10 桁でない場合は、その番号が送信された方法が表示されます。

指紋シミュレーション 説明
finger touch fingerprint-id 指がセンサーに触れた状態をシミュレートします。
finger remove 指が離れた状態をシミュレートします。

これらのコマンドの使用方法については、指紋のシミュレーションと検証をご覧ください。

指紋のシミュレーションと検証

図 1. 指紋認証画面。

finger コマンドを使用して、アプリの指紋認証をシミュレートおよび検証します。SDK Tools 24.3 以降、および Android 6.0(API レベル 23)以降が必要です。

指紋認証をシミュレートおよび検証するには、次の手順を行います。

  1. まだ指紋 ID を設定していない場合は、[Settings] > [Security] > [Fingerprint] を選択し、登録手順に沿ってエミュレータに新しい指紋を登録します。
  2. 指紋認証を受け入れるようにアプリを設定します。この設定を行うと、デバイスに指紋認証画面が表示されます。
  3. アプリに指紋認証画面が表示されている間に、コンソールに移動して、finger touch コマンドと作成した指紋 ID を入力します。これにより、指がセンサーに触れた状態をシミュレートされます。
  4. 次に、finger remove コマンドを入力して、指が離れた状態をシミュレートします。

    アプリは、実際にユーザーが指紋認証センサーに指で触れて、それから指を離したときと同じように応答する必要があります。