Android Debug Bridge(adb)

Android Debug Bridge(adb)は、デバイスと通信するための多用途コマンドライン ツールです。adb コマンドを使用すると、アプリのインストールやデバッグなど、さまざまなデバイス操作を実行できます。また、デバイス上でさまざまなコマンドを実行する際に使用する Unix シェルにアクセスできるようになります。adb は、以下の 3 つのコンポーネントで構成されるクライアント サーバー プログラムです。

  • クライアント: コマンドを送信します。クライアントは、開発マシン上で稼働します。adb コマンドを発行することにより、コマンドライン ターミナルからクライアントを呼び出すことができます。
  • デーモン(adbd): デバイス上でコマンドを実行します。デーモンは、各デバイス上でバックグラウンド プロセスとして稼働します。
  • サーバー: クライアントとデーモン間の通信を管理します。サーバーは、開発マシン上でバックグラウンド プロセスとして稼働します。

adb は、Android SDK Platform-Tools パッケージに含まれています。このパッケージは SDK Manager でダウンロードできます。SDK Manager はこのパッケージを android_sdk/platform-tools/ にインストールします。また、スタンドアロン版の Android SDK Platform-Tools パッケージが必要な場合は、こちらからダウンロードできます。

Connection Assistant を使用して一般的な問題のトラブルシューティングを行う方法など、ADB 経由で使用するためにデバイスを接続する方法については、ハードウェア デバイス上でアプリを実行するをご覧ください。

adb の仕組み

adb クライアントを起動すると、クライアントはまず、すでに稼働済みの adb サーバー プロセスが存在していないかチェックします。サーバー プロセスが存在していない場合、クライアントは、サーバー プロセスを起動します。起動したサーバーは、ローカル TCP ポート 5037 にバインドされ、adb クライアントから送信されたコマンドをリッスンします。adb クライアントはすべて、ポート 5037 を使用して adb サーバーと通信します。

次に、サーバーは、すべての稼働中のデバイスに対する接続をセットアップします。 サーバーは、最初の 16 台のエミュレータが使用する 5555~5585 の範囲で奇数番号のポートをスキャンすることで、エミュレータを探します。サーバーは adb デーモン(adbd)を発見すると、そのポートへの接続をセットアップします。各エミュレータは、連続したポートのペアを使用します(コンソール接続用の偶数番号のポートと adb 接続用の奇数番号のポート)。次に例を示します。

Emulator 1, console: 5554
Emulator 1, adb: 5555
Emulator 2, console: 5556
Emulator 2, adb: 5557
...

上記のように、ポート 5555 で adb に接続しているエミュレータは、ポート 5554 でコンソールがリッスンを行うエミュレータと同一になります。

サーバーがすべてのデバイスへの接続をセットアップすると、adb コマンドを使用して各デバイスにアクセスできるようになります。サーバーは、デバイスへの接続を管理し、複数の adb クライアントから送信されるコマンドを処理します。そのため、どのクライアント(またはスクリプト)からでも、デバイスを制御することができます。

デバイス上で adb デバッグを有効にする

USB 接続したデバイスで adb を使用するには、デバイスのシステム設定で、[開発者向けオプション] の [USB デバッグ] を有効にする必要があります。

Android 4.2 以降の場合、[開発者向けオプション] 画面はデフォルトで非表示になっています。表示するには、[設定] > [端末情報] に移動して、[ビルド番号] を 7 回タップします。前の画面に戻ると、下部に [開発者向けオプション] が表示されています。

デバイスによって、[開発者向けオプション] の表示位置や名前が異なる場合があります。

これで、デバイスと USB を接続できるようになります。デバイスが接続されていることを確認するには、android_sdk/platform-tools/ ディレクトリから adb devices を実行します。接続されていれば、デバイス名が「device」のリストに表示されます。

注: Android 4.2.2 以降を搭載しているデバイスを接続すると、このコンピュータ経由のデバッグを許可する RSA キーを受け入れるかどうかを尋ねるダイアログが表示されます。RSA キーは、ユーザー デバイスのセキュリティを保護するための仕組みです。デバイスのロックを解除してこのダイアログで許可しない限り、USB デバッグや他の adb コマンドは実行できません。

USB 経由でデバイスに接続する方法については、ハードウェア デバイス上でアプリを実行するをご覧ください。

Wi-Fi 経由でデバイスに接続する

adb は通常、USB 経由でデバイスと通信しますが、下記のように、最初のセットアップ手順の一部を USB 経由で行った後であれば、Wi-Fi 経由で adb を使用することもできます。ただし、Wear OS 向けに開発を行っている場合は、Wear OS アプリ向けデバッグガイドをご覧ください。このガイドには、Wi-Fi 経由や Bluetooth 経由で adb を使用するための特別な手順が記載されています。

  1. Android デバイスと adb ホスト コンピュータを、両方がアクセス可能な Wi-Fi ネットワークに接続します。 必ずしもすべてのアクセス ポイントが適切であるとは限りません。adb を適切にサポートするようファイアウォールが設定されているアクセス ポイントを使用する必要がある場合があります。
  2. Wear OS デバイスに接続する場合は、そのデバイスとペア設定されているスマートフォンの Bluetooth をオフにします。
  3. USB ケーブル経由で、デバイスとホスト コンピュータを接続します。
  4. ポート 5555 で TCP/IP 接続をリッスンするようにターゲット デバイスを設定します。
        adb tcpip 5555
        
  5. ターゲット デバイスから USB ケーブルを切り離します。
  6. Android デバイスの IP アドレスを確認します。たとえば、Nexus デバイスの場合、[設定] > [タブレット情報](または、[端末情報])> [端末の状態] > [IP アドレス] で、IP アドレスを確認することができます。また、Wear OS デバイスの場合、[設定] > [Wi-Fi 設定] > [詳細設定] > [IP アドレス] で、IP アドレスを確認することができます。
  7. 確認した IP アドレスを使用して、デバイスに接続します。
        adb connect device_ip_address
        
  8. ホスト コンピュータがターゲット デバイスに接続しているか確認します。
        $ adb devices
        List of devices attached
        device_ip_address:5555 device
        

これで準備が整いました。

adb 接続が失われた場合:

  1. Android デバイスと同じ Wi-Fi ネットワークにホストが接続したままであるか確認します。
  2. adb connect のステップを再度実行して再接続します。
  3. 上記の手順で接続できない場合は、adb ホストをリセットします。
        adb kill-server
        

    その後、最初からやり直します。

デバイスのクエリを行う

adb コマンドを発行する前に、どのデバイス インスタンスが adb サーバーに接続しているのか把握しておくと便利です。devices コマンドを使用すると、接続済みデバイスのリストが生成されます。

      adb devices -l
      

このコマンドのレスポンスとして、adb は、各デバイスに関する以下のステータス情報を出力します。

  • シリアル番号: ポート番号に基づいてデバイスを一意に識別するために adb が作成する文字列(シリアル番号の例: emulator-5554)。
  • 状態: デバイスの接続状態を示します。次のいずれかになります。
    • offline: デバイスが adb に接続していないか、応答していません。
    • device: デバイスが adb サーバーに接続中です。この状態は、Android システムが完全に起動して動作中であることを示しているわけではありません。デバイスは Android システムの起動中に adb に接続します。システムの起動が完了した後は、デバイスは通常、この動作状態になります。
    • no device: 接続されているデバイスがありません。
  • 説明: devices コマンドに -l オプションを追加すると、デバイスの説明が表示されます。この情報は、複数のデバイスを接続している場合に、デバイスを区別するうえで役立ちます。

devices コマンドとその出力の例を以下に示します。ここでは、稼働中のデバイスが 3 つあります。リストの最初の 2 行はエミュレータを示し、3 行目はコンピュータにアタッチされたハードウェア デバイスを示します。

$ adb devices
    List of devices attached
    emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64
    emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86
    0a388e93      device usb:1-1 product:razor model:Nexus_7 device:flo
    

エミュレータがリスト内に表示されないケース

adb devices コマンドのコマンド シーケンスによっては、まれに、実行中のエミュレータがパソコン上には表示されていても adb devices 出力内には表示されないというケースが発生することがあります。この状況が発生するのは、以下のすべての条件が満たされた場合です。

  1. adb サーバーが稼働していない。
  2. emulator コマンドを使用する際、-port オプションまたは -ports オプションを追加し、5554~5584 の範囲内の奇数番号ポート値を指定した。
  3. 選択した奇数番号ポートがビジー状態でなく、指定のポート番号でポート接続を確立できた。あるいは、選択した奇数番号ポートがビジー状態であったが、「要件 2」を満たすポートにエミュレータが切り替えた。
  4. エミュレータを起動した後に、adb サーバーを起動した。

この状況を回避する方法としては、エミュレータに独自のポートを選択させ、一度に 16 台を超えるエミュレータを稼働しないようにする、という方法があります。別の方法としては、以下の例に示すように、emulator コマンドを使用する前に常に adb サーバーを起動しておく、という方法があります。

例 1: 次のコマンド シーケンスの場合、adb devices コマンドは adb サーバーを起動しますが、デバイスのリストは表示しません。

adb サーバーを停止して、以下のコマンドを順序どおりに入力します。avd 名の部分には、ご利用のシステムに応じて有効な avd 名を入力してください。avd 名のリストを取得するには、emulator -list-avds と入力します。 emulator コマンドは android_sdk/tools ディレクトリにあります。

    $ adb kill-server
    $ emulator -avd Nexus_6_API_25 -port 5555
    $ adb devices

    List of devices attached
    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    

例 2: 次のコマンド シーケンスの場合、adb サーバーが先に起動してから、adb devices によってデバイスのリストが表示されます。

adb devices の出力内でエミュレータを表示するには、次のように、adb サーバーを停止してから、emulator コマンドを使用した後、adb サーバーを再起動して、adb devices コマンドを使用します。

    $ adb kill-server
    $ emulator -avd Nexus_6_API_25 -port 5557
    $ adb start-server
    $ adb devices

    List of devices attached
    emulator-5557 device
    

エミュレータ用のコマンドライン オプションの詳細については、コマンドライン パラメータを使用するをご覧ください。

特定のデバイスにコマンドを送信する

複数のデバイスが稼働している場合、adb コマンドを発行する際にターゲット デバイスを指定する必要があります。ターゲットを指定するには、devices コマンドを使用して、ターゲットのシリアル番号を取得します。シリアル番号を取得したら、adb コマンドで -s オプションを使用して、シリアル番号を指定します。多くの adb コマンドを発行する場合は、代わりに $ANDROID_SERIAL 環境変数を設定してシリアル番号を指定します。-s$ANDROID_SERIAL を両方使用した場合、-s$ANDROID_SERIAL をオーバーライドします。

次の例では、接続されているデバイスのリストを取得し、該当デバイスのシリアル番号を使用してデバイスに helloWorld.apk をインストールします。

    $ adb devices
    List of devices attached
    emulator-5554 device
    emulator-5555 device

    $ adb -s emulator-5555 install helloWorld.apk
    

注: 複数のデバイスが利用できるときに、ターゲット デバイスを指定せずにコマンドを発行すると、adb はエラーを表示します。

複数のデバイスが利用できるときに、その中にエミュレータが 1 つしかない場合は、-e オプションを使用することで、そのエミュレータにコマンドを送信できます。同様に、複数のデバイスが存在するときに、その中にハードウェア デバイスが 1 つしかない場合は、-d オプションを使用することで、そのハードウェア デバイスにコマンドを送信できます。

アプリをインストールする

adb で install コマンドを使用して、エミュレータまたは接続されたデバイスに APK をインストールできます。

    adb install path_to_apk
    

テスト APK をインストールする場合は、install コマンドで -t オプションを使用する必要があります。詳しくは、-t をご覧ください。

エミュレータ / デバイス インスタンス上にインストール可能な APK ファイルを作成する方法については、アプリをビルドして実行するをご覧ください。

Android Studio を使用している場合は、エミュレータ / デバイス上にアプリをインストールする際、adb を直接使用する必要はありません。代わりに、Android Studio がアプリのパッケージ化とインストールを処理します。

ポート転送をセットアップする

forward コマンドを使用して任意のポート転送をセットアップし、特定のホストポート上のリクエストを別のポートに転送できます。 ホストポート 6100 からデバイスポート 7100 へのポート転送をセットアップする例を以下に示します。

    adb forward tcp:6100 tcp:7100
    

ホストポート 6100 から local:logd へのポート転送をセットアップする例を以下に示します。

    adb forward tcp:6100 local:logd
    

デバイスにファイルをコピーする、デバイスからファイルをコピーする

pull コマンドと push コマンドを使用して、ファイルとデバイス間でコピーできます。特定の場所に APK ファイルをコピーするだけの install コマンドとは異なり、pull コマンドと push コマンドを使用すると、デバイス内の任意の場所に任意のディレクトリやファイルをコピーできます。

デバイスからファイルやディレクトリ(およびそのサブディレクトリ)をコピーするには、次のコマンドを使用します。

    adb pull remote local
    

デバイスにファイルやディレクトリ(およびそのサブディレクトリ)をコピーするには、次のコマンドを使用します。

    adb push local remote
    

localremote は、ご利用の開発マシン(ローカル)とデバイス(リモート)のターゲット ファイル / ディレクトリのパスに置き換えてください。次に例を示します。

    adb push foo.txt /sdcard/foo.txt
    

adb サーバーを停止する

adb がコマンドに応答しない場合など、問題を解決するために、adb サーバー プロセスを終了して再起動する措置が必要となることがあります。

adb サーバーを停止するには、adb kill-server コマンドを使用します。 その後、別の adb コマンドを発行すると、サーバーを再起動できます。

adb コマンドの発行

adb コマンドは、開発マシンのコマンドラインまたはスクリプトから発行できます。 次のように使用します。

    adb [-d | -e | -s serial_number] command
    

稼働中のエミュレータが 1 つだけの場合や、コネクテッド デバイスが 1 つだけの場合は、デフォルトでそのエミュレータ / デバイスに adb コマンドが送信されます。複数のエミュレータが動作している場合や、複数のデバイスが接続されている場合は、-d-e、または -s オプションを使用して、コマンドの対象となるターゲット デバイスを指定します。

サポートされているすべての adb コマンドの詳細リストは、次のコマンドを使用して確認できます。

    adb --help
    

シェルコマンドを発行する

shell コマンドを使用して、adb を介してデバイス コマンドを発行したり、インタラクティブ シェルを起動したりできます。 単一のコマンドを発行するには、次のように shell コマンドを使用します。

    adb [-d |-e | -s serial_number] shell shell_command
    

デバイスで対話型シェルを起動するには、次のように shell コマンドを使用します。

    adb [-d | -e | -s serial_number] shell
    

対話型シェルを終了するには、Ctrl+D キーを押すか、exit と入力します。

注: Android Platform-Tools 23 以降、adb は、ssh(1) コマンドと同じ方法で引数を処理するようになりました。 この変更により、コマンド インジェクションに関するさまざまな問題が修正され、シェルのメタ文字adb install Let\'sGo.apk など)を含むコマンドを安全に実行できるようになりました。ただし、この変更により、シェルのメタ文字を含むコマンドの解釈も変更されています。 たとえば、一重引用符(')はローカルシェルによって消去されるため、adb shell setprop foo 'a b' というコマンドは、デバイス上では adb shell setprop foo a b として認識され、エラーになります。このコマンドを機能させるには、ssh(1) の場合と同じように、ローカルシェル用とリモートシェル用として引用符を 2 回付けます。たとえば、adb shell setprop foo "'a b'" のように指定できます。

Android は、通常の Unix コマンドライン ツールのほとんどを提供しています。使用可能なツールの一覧を確認するには、次のコマンドを使用します。

adb shell ls /system/bin

ほとんどのコマンドは、--help 引数を指定するとヘルプを参照できます。 シェルコマンドの多くは、toybox によって提供されています。 toybox --help を指定すると、すべての toybox コマンドに対する一般的なヘルプを参照できます。

システムログのモニタリングに役立つ Logcat コマンドライン ツールもご覧ください。

アクティビティ マネージャー(am)を呼び出す

adb シェル内でアクティビティ マネージャー(am)ツールを使用してコマンドを発行することにより、アクティビティの起動、プロセスの強制停止、インテントのブロードキャスト、デバイス画面プロパティの変更など、さまざまなシステム アクションを実行することができます。シェル内では、構文は次のようになります。

    am command
    

リモートシェルに入らずに直接 adb から Activity Manager コマンドを発行することもできます。次に例を示します。

    adb shell am start -a android.intent.action.VIEW
    

表 2. 利用可能なアクティビティ マネージャー コマンド

コマンド 説明
start [options] intent Activity で指定した intent を起動します。

インテント引数の指定をご覧ください。

以下のオプションがあります。

  • -D: デバッグを有効にします。
  • -W: 起動が完了するまで待ちます。
  • --start-profiler file: プロファイラを起動し、結果を file に送信します。
  • -P file: --start-profiler と同様ですが、アプリがアイドル状態になるとプロファイリングが停止します。
  • -R count: アクティビティの起動を count 回繰り返します。各繰り返しの前に、トップレベルのアクティビティが完了します。
  • -S: アクティビティを起動する前に、ターゲット アプリを強制停止します。
  • --opengl-trace: OpenGL 関数のトレースを有効にします。
  • --user user_id | current: 実行するユーザーを指定します。指定しなかった場合、現在のユーザーとして実行します。
startservice [options] intent intent で指定した Service を起動します。

インテント引数の指定をご覧ください。

以下のオプションがあります。

  • --user user_id | current: 実行するユーザーを指定します。指定しなかった場合、現在のユーザーとして実行します。
force-stop package package(アプリのパッケージ名)に関連付けられているすべてのものを強制停止します。
kill [options] package package(アプリのパッケージ名)に関連付けられているすべてのプロセスを強制終了します。このコマンドが強制終了するのは、強制終了しても安全でユーザー エクスペリエンスに影響を及ぼさないプロセスだけに限られます。

以下のオプションがあります。

  • --user user_id | all | current: 強制終了するプロセスを保持しているユーザーを指定します。指定しなかった場合、すべてのユーザーが対象になります。
kill-all すべてのバックグラウンド プロセスを強制終了します。
broadcast [options] intent ブロードキャスト インテントを発行します。

インテント引数の指定をご覧ください。

以下のオプションがあります。

  • [--user user_id | all | current]: 送信先のユーザーを指定します。指定しなかった場合、すべてのユーザーに送信されます。
instrument [options] component Instrumentation インスタンスでモニタリングを開始します。 通常、ターゲット component の形式は test_package/runner_class です。

以下のオプションがあります。

  • -r: 未加工の結果を出力します(そうでなければ report_key_streamresult をデコードします)。パフォーマンス測定値の未加工出力を生成するには、[-e perf true] と併用します。
  • -e name value: 引数 namevalue に設定します。 テストランナーの場合、一般的な形式は -e testrunner_flag value[,value...] です。
  • -p file: プロファイリング データを file に書き込みます。
  • -w: インストゥルメンテーションが完了するのを待ってから、結果を返します。テストランナーの場合、必須です。
  • --no-window-animation: 実行中に、ウィンドウのアニメーションをオフにします。
  • --user user_id | current: インストゥルメンテーションを実行するユーザーを指定します。指定しなかった場合、現在のユーザーが対象になります。
profile start process file process でプロファイラを起動し、結果を file に書き込みます。
profile stop process process でプロファイラを停止します。
dumpheap [options] process file process のヒープをダンプし、file に書き込みます。

以下のオプションがあります。

  • --user [user_id | current]: プロセス名を指定するときに、ダンプするプロセスのユーザーを指定します。指定しなかった場合、現在のユーザーが対象になります。
  • -n: マネージヒープではなく、ネイティブ ヒープをダンプします。
set-debug-app [options] package アプリの package をデバッグするように設定します。

以下のオプションがあります。

  • -w: アプリが起動する際、デバッガを待ちます。
  • --persistent: この値を保持します。
clear-debug-app 以前 set-debug-app でデバッグするように設定されていたパッケージをクリアします。
monitor [options] クラッシュまたは ANR のモニタリングを開始します。

以下のオプションがあります。

  • --gdb: クラッシュ / ANR が発生したら、指定ポートで gdbserv を起動します。
screen-compat {on | off} package package画面互換モードを制御します。
display-size [reset | widthxheight] デバイスの表示サイズをオーバーライドします。 このコマンドは、大きな画面のデバイスで低い画面解像度を再現したり、逆に、小さな画面のデバイスで高い画面解像度を再現したり、さまざまな画面サイズでアプリをテストする場合に役立ちます。

例:
am display-size 1280x800

display-density dpi デバイスの表示密度をオーバーライドします。 このコマンドは、低密度画面のデバイスで高密度画面環境を再現したり、逆に、高密度画面のデバイスで低密度画面環境を再現したり、さまざまな画面密度でアプリをテストする場合に役立ちます。

例:
am display-density 480

to-uri intent 特定のインテント指定を URI として出力します。

インテント引数の指定をご覧ください。

to-intent-uri intent 特定のインテント指定を intent: URI として出力します。

インテント引数の指定をご覧ください。

インテント引数の指定

intent 引数を受け取るアクティビティ マネージャー コマンドの場合、以下のオプションを使用してインテントを指定できます。

パッケージ マネージャーを呼び出す(pm

adb シェル内でパッケージ マネージャー(pm)ツールを使用してコマンドを発行することにより、デバイスにインストールされているアプリ パッケージに対してアクションやクエリを実行できます。シェル内では、構文は次のようになります。

    pm command
    

リモートシェルに入らずに直接 adb から Package Manager コマンドを発行することもできます。次に例を示します。

    adb shell pm uninstall com.example.MyApp
    

表 3: 利用可能な Package Manager コマンド

コマンド 説明
list packages [options] filter すべてのパッケージを出力します。必要に応じて、filter のテキストをパッケージ名に含むパッケージだけを出力することもできます。

以下のオプションがあります。

  • -f: 関連付けられているファイルを表示します。
  • -d: 無効なパッケージだけを表示するようにフィルタリングします。
  • -e: 有効なパッケージだけを表示するようにフィルタリングします。
  • -s: システム パッケージだけを表示するようにフィルタリングします。
  • -3: サードパーティ パッケージだけを表示するようにフィルタリングします。
  • -i: パッケージのインストーラを表示します。
  • -u: アンインストールしたパッケージも含めます。
  • --user user_id: クエリ対象のユーザー空間。
list permission-groups 既知のすべての権限グループを出力します。
list permissions [options] group 既知のすべての権限を出力します。必要に応じて、group 内の権限だけを出力することもできます。

以下のオプションがあります。

  • -g: グループ別に整理します。
  • -f: すべての情報を出力します。
  • -s: 概要。
  • -d: 危険な権限のみを一覧表示します。
  • -u: ユーザーに表示される権限のみを一覧表示します。
list instrumentation [options] すべてのテスト パッケージを一覧表示します。

以下のオプションがあります。

  • -f: テスト パッケージ用の APK ファイルを一覧表示します。
  • target_package: このアプリ専用のテスト パッケージを一覧表示します。
list features システムのすべての機能を出力します。
list libraries 現在のデバイスがサポートしているすべてのライブラリを出力します。
list users システム上のすべてのユーザーを出力します。
path package 指定した package の APK へのパスを出力します。
install [options] path path で指定されたパッケージをシステムにインストールします。

以下のオプションがあります。

  • -r: データを保持したまま、既存のアプリを再インストールします。
  • -t: テスト APK のインストールを許可します。Gradle によってテスト APK が生成されるのは、アプリの実行やデバッグを完了している場合や、Android Studio の [Build] > [Build APK] コマンドを使用した場合に限られます。APK のビルドに Developer Preview SDK を使用した場合(targetSdkVersion が数字ではなく文字の場合)、install コマンドで -t オプションを指定してテスト APK をインストールする必要があります。
  • -i installer_package_name: インストーラ パッケージ名を指定します。
  • --install-location location: 次のいずれかの値を使用して、インストール場所を設定します。
    • 0: デフォルトのインストール場所を使用します。
    • 1: 内部デバイス ストレージにインストールします。
    • 2: 外部メディアにインストールします。
  • -f: 内部システムメモリにパッケージをインストールします。
  • -d: バージョン コードのダウングレードを許可します。
  • -g: アプリ マニフェストに記載されている権限をすべて付与します。
  • --fastdeploy: APK の変更された部分のみを更新して、インストール済みパッケージの更新を迅速化します。
uninstall [options] package システムからパッケージを削除します。

以下のオプションがあります。

  • -k: パッケージの削除後も、データとキャッシュのディレクトリを保持します。
clear package パッケージに関連付けられているすべてのデータを削除します。
enable package_or_component 特定のパッケージまたはコンポーネント(「package/class」と記述)を有効にします。
disable package_or_component 特定のパッケージまたはコンポーネント(「package/class」と記述)を無効にします。
disable-user [options] package_or_component

以下のオプションがあります。

  • --user user_id: 無効にするユーザー。
grant package_name permission アプリに権限を付与します。Android 6.0(API レベル 23)以降を搭載するデバイスの場合、アプリ マニフェスト内で宣言されている権限が対象になります。Android 5.1(API レベル 22)以下を搭載するデバイスの場合、アプリによって定義されている任意の権限が対象になります。
revoke package_name permission アプリに付与した権限を取り消します。Android 6.0(API レベル 23)以降を搭載するデバイスの場合、アプリ マニフェスト内で宣言されている権限が対象になります。Android 5.1(API レベル 22)以下を搭載するデバイスの場合、アプリによって定義されている任意の権限が対象になります。
set-install-location location デフォルトのインストール場所を変更します。有効な場所の値は次のとおりです。
  • 0: 自動 - システムが最適な場所を決定します。
  • 1: 内部 - 内部デバイス ストレージにインストールします。
  • 2: 外部 - 外部メディアにインストールします。

注: インストール場所の変更は、デバッグ目的の場合にのみ実行してください。インストール場所を変更すると、アプリが破損したり、想定外の動作が発生したりする可能性があります。

get-install-location 現在のインストール場所を返します。戻り値は次のとおりです。
  • 0 [auto]: システムが最適な場所を決定します。
  • 1 [internal]: 内部デバイス ストレージにインストールします。
  • 2 [external]: 外部メディアにインストールします。
set-permission-enforced permission [true | false] 特定のパーミッションを強制適用するかどうかを指定します。
trim-caches desired_free_space キャッシュ ファイルを削減して、指定した空き領域を確保します。
create-user user_name 指定した user_name を持つ新しいユーザーを作成し、そのユーザーの新しいユーザー ID を出力します。
remove-user user_id 指定した user_id を持つユーザーを削除し、そのユーザーに関連付けられているすべてのデータを削除します。
get-max-users デバイスがサポートする最大ユーザー数を出力します。

デバイス ポリシー マネージャーを呼び出す(dpm

デバイス ポリシー マネージャー(dpm)ツールにコマンドを発行することにより、デバイス管理アプリなどのエンタープライズ アプリの開発やテストを促進できます。このツールを使用することで、アクティブな管理アプリを制御したり、デバイス上のポリシー ステータス データを変更したりすることができます。 シェル内では、構文は次のようになります。

    dpm command
    

リモートシェルに入らずに直接 adb から Device Policy Manager コマンドを発行することもできます。

    adb shell dpm command
    

表 4. 利用可能な Device Policy Manager コマンド

コマンド 説明
set-active-admin [options] component component をアクティブな管理者として設定します。

以下のオプションがあります。

  • --user user_id: ターゲット ユーザーを指定します。--user current を渡すと、現在のユーザーを選択することもできます。
set-profile-owner [options] component component をアクティブな管理者として設定し、そのパッケージを既存ユーザーのプロファイル オーナーとして設定します。

以下のオプションがあります。

  • --user user_id: ターゲット ユーザーを指定します。--user current を渡すと、現在のユーザーを選択することもできます。
  • --name name: 人間が読める形式で組織名を指定します。
set-device-owner [options] component component をアクティブな管理者として設定し、そのパッケージをデバイス オーナーとして設定します。

以下のオプションがあります。

  • --user user_id: ターゲット ユーザーを指定します。--user current を渡すと、現在のユーザーを選択することもできます。
  • --name name: 人間が読める形式で組織名を指定します。
remove-active-admin [options] component アクティブな管理者を無効にします。アプリは、マニフェスト内で android:testOnly を宣言する必要があります。このコマンドは、デバイス オーナーとプロファイル オーナーも削除します。

以下のオプションがあります。

  • --user user_id: ターゲット ユーザーを指定します。--user current を渡すと、現在のユーザーを選択することもできます。
clear-freeze-period-record 以前に設定したシステム OTA 更新凍結期間のデバイスの記録をクリアします。この機能により、凍結期間を管理するアプリを開発する際、スケジュール設定に関するデバイス制限を回避することができます。システム アップデートを管理するをご覧ください。

Android 9.0(API レベル 28)以降を搭載しているデバイスでサポートされます。

force-network-logs 既存のネットワーク ログを DPC によって取得できるように、システムを強制設定します。利用可能な接続ログや DNS ログがある場合、DPC は onNetworkLogsAvailable() コールバックを受信します。ネットワーク アクティビティ ロギングをご覧ください。

このコマンドにはレート制限があります。Android 9.0(API レベル 28)以降を搭載しているデバイスでサポートされます。

force-security-logs 既存のセキュリティ ログを DPC によって取得できるように、システムを強制設定します。利用可能なログがある場合、DPC は onSecurityLogsAvailable() コールバックを受信します。エンタープライズ デバイス アクティビティのログを記録するをご覧ください。

このコマンドにはレート制限があります。Android 9.0(API レベル 28)以降を搭載しているデバイスでサポートされます。

スクリーンショットを撮る

screencap コマンドは、デバイス画面のスクリーンショットを撮影するためのシェル ユーティリティです。 シェル内では、構文は次のようになります。

    screencap filename
    

コマンドラインから screencap を使用するには、次のように入力します。

    adb shell screencap /sdcard/screen.png
    

スクリーンショット セッションの例を以下に示します。ここでは、adb シェルを使用してスクリーンショットを取得し、pull コマンドを使用してデバイスからファイルをダウンロードしています。

    $ adb shell
    shell@ $ screencap /sdcard/screen.png
    shell@ $ exit
    $ adb pull /sdcard/screen.png
    

動画を撮影する

screenrecord コマンドは、Android 4.4(API レベル 19)以降を搭載しているデバイスの画面を録画するためのシェル ユーティリティです。このユーティリティは、画面上のアクティビティを MPEG-4 ファイルに記録します。このファイルを使用して、宣伝 / トレーニング用の動画やデバッグ / テスト用の動画を作成することができます。

シェル内では、構文は次のようになります。

    screenrecord [options] filename
    

コマンドラインから screenrecord を使用するには、次のように入力します。

    adb shell screenrecord /sdcard/demo.mp4
    

画面の録画を停止するには、Ctrl+C(Mac の場合は Command+C)を押します。押さなかった場合、録画は 3 分後に自動的に停止するか、--time-limit によって設定された制限時間が経過すると停止します。

デバイス画面の録画を開始するには、screenrecord コマンドを実行して動画を録画します。その後、pull コマンドを実行して、動画をデバイスからホスト コンピュータにダウンロードできます。録画セッションの例を以下に示します。

    $ adb shell
    shell@ $ screenrecord --verbose /sdcard/demo.mp4
    (press Control + C to stop)
    shell@ $ exit
    $ adb pull /sdcard/demo.mp4
    

screenrecord ユーティリティを使用すると、デバイス画面のアスペクト比を維持した状態で、サポートされている任意の解像度とリクエストしたビットレートで録画することができます。このユーティリティは、デフォルトではネイティブの画面解像度と画面方向で録画を行い、最大 3 分間録画することができます。

screenrecord ユーティリティに関する制限事項:

  • 動画ファイルに音声は記録されません。
  • Wear OS を搭載しているデバイスの場合、画面の録画は行えません。
  • デバイスによっては、ネイティブ画面解像度で録画できないことがあります。 画面の録画中に問題が発生した場合は、画面解像度を下げてみてください。
  • 録画中の画面回転はサポートされていません。録画中に画面を回転すると、録画中の画面の一部がカットされます。

表 5. screenrecord オプション

オプション 説明
--help コマンドの構文とオプションを表示します。
--size widthxheight 動画のサイズを 1280x720 に設定します。デフォルト値は、デバイスのネイティブ画面解像度です(サポートされている場合)。サポートされていない場合、1280×720 になります。最適な結果を得るには、デバイスの Advanced Video Coding(AVC)エンコーダがサポートしているサイズを使用してください。
--bit-rate rate 動画のビットレートを Mbps 単位で設定します。デフォルト値は 4 Mbps です。 ビットレートを増大すると、動画の品質を向上できますが、その分、動画ファイルのサイズも大きくなります。録画ビットレートを 6 Mbps に設定した例を以下に示します。

screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time 最大録画時間を秒単位で設定します。デフォルト値および最大値は 180 秒(3 分)です。
--rotate 出力を 90 度回転します。この機能は試験運用版です。
--verbose ログ情報をコマンドライン画面に表示します。このオプションを設定しなかった場合、ユーティリティは実行中に情報を表示しません。

アプリの ART プロファイルを読み込む

Android 7.0(API レベル 24)以降、Android ランタイム(ART)が、インストールしたアプリの実行プロファイルを収集するようになりました。この実行プロファイルを利用することで、アプリのパフォーマンスを最適化できます。収集されたプロファイルを調査して、頻繁に実行されるメソッドや、アプリの起動中に使用されるクラスなどについて把握しておくことをおすすめします。

プロファイル情報をテキスト形式で生成するには、次のコマンドを使用します。

    adb shell cmd package dump-profiles package
    

生成されたファイルを取得するには、次のコマンドを使用します。

    adb pull /data/misc/profman/package.txt
    

テストデバイスをリセットする

複数のテストデバイスでアプリをテストする場合、テストの間にデバイスをリセットすると役に立つことがあります。たとえば、ユーザーデータを削除してテスト環境をリセットします。Android 10(API レベル 29)以降が実行されているテストデバイスは、次のように testharness シェルコマンドを使用して出荷時設定にリセットできます。

    adb shell cmd testharness enable
    

testharness を使用してデバイスを復元すると、デバイスが自動的に RSA 鍵をバックアップします。これにより、現在のワークステーションを使用して、同じ場所でデバッグを行えるようになります。つまり、デバイスがリセットされた後もワークステーションはデバッグを継続でき、新しい鍵を手動で登録せずにデバイスに adb コマンドを発行できます。

また、testharness を使用してデバイスを復元すると、以下のデバイスの設定も変更され、アプリのテストをより簡単かつ安全に継続できるようになります。

  • デバイスは、最初のデバイス設定ウィザードが表示されないよう、特定のシステム設定を行います。つまり、デバイスがアプリのインストール、デバッグ、テストをすばやく行える状態になります。
  • 設定:
    • ロック画面を無効にする
    • 緊急アラートを無効にする
    • アカウントの自動同期を無効にする
    • 自動システム アップデートを無効にする
  • その他:
    • プリインストールされているセキュリティ アプリを無効にする

アプリで testharness コマンドのデフォルト設定を検出して、その設定に適応する必要がある場合は、ActivityManager.isRunningInUserTestHarness() を使用できます。

sqlite

sqlite3 は sqlite データベースを調べる sqlite コマンドライン プログラムを起動します。 これには、テーブルの内容を出力する .dump や、既存のテーブルに対する SQL CREATE ステートメントを出力する .schema などのコマンドがあります。 次のように、SQLite コマンドをコマンドラインから実行することもできます。

    $ adb -s emulator-5554 shell
    $ sqlite3 /data/data/com.example.app/databases/rssitems.db
    SQLite version 3.3.12
    Enter ".help" for instructions
    

詳細については、sqlite3 コマンドライン ドキュメントをご覧ください。