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 接続用の奇数番号のポート)。たとえば、次のようになります。

エミュレータ 1 - コンソール: 5554
エミュレータ 1 - adb: 5555
エミュレータ 2 - コンソール: 5556
エミュレータ 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 をオーバーライドします。

アタッチされているデバイスのリストを取得し、そのうちの 1 つのデバイスのシリアル番号を使用して、ターゲット デバイス上に 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 コマンドとその意味、使用方法について、以下の表に示します。

表 1: 利用可能な adb コマンドとオプション

グローバル オプション 説明
-a localhost だけでなく、すべてのネットワーク インターフェースをリッスンします。
-d アタッチされている USB デバイスだけに adb コマンドを送信します。複数の USB デバイスがアタッチされていると、エラーを返します。
-e 稼働中のエミュレータ インスタンスだけに adb コマンドを送信します。複数のエミュレータが稼働していると、エラーを返します。
-s serial_number adb が割り当てたシリアル番号(「emulator-5556」など)によって指定される特定のデバイスに adb コマンドを送信します。$ANDROID_SERIAL 環境変数に格納されているシリアル番号値をオーバーライドします。特定のデバイスにコマンドを送信するをご覧ください。
-H server adb サーバーホストの名前。デフォルト値は localhost です。
-P port adb サーバーのポート番号。デフォルト値は 5037 です。
-L socket 指定された adb サーバー ソケットをリッスンします。デフォルト値は tcp:localhost:5037 です。
一般コマンド 説明
devices [-l] すべてのデバイスのリストを出力します。-l オプションを使用すると、デバイスの説明を追加できます。詳細については、デバイスのクエリを行うをご覧ください。
help サポートされている adb コマンドとその説明のリストを出力します。
version adb のバージョン番号を出力します。
run-as package_name コマンドをアプリとしてデバイス上で実行します(「package_name」を使用してアプリを指定します)。これにより、ルートアクセス権限を必要とせずに、指定したアプリがコマンドを実行しているかのように(つまり、アプリと同じデバイス アクセス権限を持って)、adb 内でコマンドを実行できます。この機能は、ルート権限を取得していないデバイスや Play ストア イメージを組み込んだエミュレータ上で adb を使用する場合に必要になることがあります。アプリは、デバッグ可能である必要があります。
ネットワーキング コマンド 説明
connect host[:port] TCP/IP 経由でデバイスに接続します。ポートを指定しなかった場合、デフォルト ポートの 5555 が使用されます。
disconnect [host | host:port] 指定ポート上で稼働している指定 TCP/IP デバイスから切断します。ホストやポートを指定しなかった場合、すべてのデバイスがすべての TCP/IP ポートから切断されます。ホストを指定し、ポートは指定しなかった場合、デフォルト ポートの 5555 が使用されます。
forward --list 転送されたソケット接続をすべてリスト表示します。
forward [--no-rebind] local remote 指定ローカルポートからデバイス上の指定リモートポートにソケット接続を転送します。以下の方法で、local ポートと remote ポートの両方を指定できます。
  • tcp:port: オープンポートを選択するには、local の値を tcp:0 にします。
  • localabstract:unix_domain_socket_name
  • localreserved:unix_domain_socket_name
  • localfilesystem:unix_domain_socket_name
  • dev:character_device_name
  • jdwp:pid
forward --remove local 指定した転送済みソケット接続を削除します。
reverse --list デバイスからの逆ソケット接続をすべてリスト表示します。
reverse [--no-rebind] remote local ソケット接続を逆向きにします。--no-rebind オプションを追加すると、指定ソケットが以前の reverse コマンドによってすでにバインド済みの場合にリバースが失敗するようになります。以下の方法で、local 引数と remote 引数の両方に対してポートを指定できます。
  • tcp:port: オープンポートを選択するには、remote の値を tcp:0 にします。
  • localabstract:unix_domain_socket_name
  • localreserved:unix_domain_socket_name
  • localfilesystem:unix_domain_socket_name
reverse --remove remote デバイスからの指定逆ソケット接続を削除します。
reverse --remove-all デバイスからの逆ソケット接続をすべて削除します。
ファイル転送コマンド 説明
push local remote ファイルやディレクトリを、ローカル デバイス(パソコン)から、デバイス上のリモート位置にコピーします。
pull [-a] remote local リモートのファイルやディレクトリをデバイスにコピーします。-a オプションを使用すると、ファイルのタイムスタンプやモードを保持できます。
sync  [system|vendor|oem|data|all] ローカルビルドを、$ANDROID_PRODUCT_OUT 内の指定場所からデバイスに同期します。変更されたファイルはすべて、指定したパーティションからコピーされます。デフォルトでは、すべてのパーティションを同期します。Android プラットフォーム ソースをビルドするときに限り、このコマンドを使用します。アプリ デベロッパーは、このコマンドを使用する必要はありません。

$ANDROID_PRODUCT_OUT 環境変数は、Android ビルドシステムによって自動的に設定され、システム イメージの場所を格納します。通常、adb sync を実行するときに $ANDROID_PRODUCT_OUT を設定する必要はありません。この環境変数は、ビルドツリーを持っているがビルドツリー内にいない場合や、ビルドツリー間を切り替えることなくビルドツリー間を同期する場合に役立ちます。


    $ANDROID_PRODUCT_OUT=/out/target/product/generic
    adb sync
    
アプリ インストール コマンド 説明
install [options] package パッケージをデバイスにプッシュしてインストールします。以下のオプションがあります。
  • --abi abi-identifier: 特定の ABI 用のアプリを自動インストールします。
  • -l: アプリの転送をロックします。
  • -r: 既存のアプリを置き換えます。
  • -t: テスト パッケージを許可します。Developer Preview SDK を使用して APK をビルドした場合(targetSdkVersion が数字ではなく文字の場合)、テスト APK をインストールするには、install コマンドに -t オプションを追加する必要があります。詳細については、-t オプションをご覧ください。
  • -s: SD カードにアプリをインストールします。
  • -d: バージョン コードのダウングレードを許可します(デバッグ パッケージのみ)。
  • -g: すべてのランタイム パーミッションを付与します。
install-multiple [options] packages

install と同じオプションがあり、さらに以下のオプションがあります。

-p: アプリを部分的にインストールします。

uninstall [-k] package このアプリ パッケージをデバイスから削除します。-k オプションを追加すると、データ ディレクトリやキャッシュ ディレクトリを保持できます。
バックアップ / 復元コマンド 説明
backup [-f file] [-apk | -noapk] [-obb | -noobb] [-shared | -noshared] [-all] [-system | -nosystem] package_names デバイスのデータのアーカイブを file に書き込みます。ファイル名を指定しなかった場合、デフォルト ファイル名の backup.adb になります。-all オプションと -shared オプションを指定した場合、package リストは必須ではありません。他のオプションの使用方法は以下のとおりです。
  • -apk | -noapk: .apk ファイルをバックアップするのか、バックアップしないのかを指定します。デフォルト値は -noapk です。
  • -obb | -noobb: .obb ファイルをバックアップするのか、バックアップしないのかを指定します。デフォルト値は -noobb です。
  • -shared | -noshared: 共有ストレージをバックアップするのか、バックアップしないのかを指定します。デフォルト値は -noshared です。
  • -all: インストールされているすべてのアプリをバックアップします。
  • -system | -nosystem: インストールされているすべてのアプリをバックアップする際に(-all)、システムアプリを含めるかどうかを指定します。デフォルト値は -system です。
restore file file からデバイス コンテンツを復元します。
デバッグ コマンド 説明
bugreport path 指定したパスに bugreport を出力します。path がディレクトリの場合、デフォルト ファイル名の bugreport.zip を使用して、バグレポートをそのディレクトリに保存します。圧縮バグレポートをサポートしていないデバイスの場合は、stdout に出力します。
jdwp 指定デバイス上で利用可能な JDWP プロセスのリストを出力します。forward jdwp:pid を使用すると、特定の JDWP プロセスに接続できます。たとえば、次のようになります。
adb forward tcp:8000 jdwp:472
jdb -attach localhost:8000
logcat [-help] [option] [filter-spec] ログデータを画面に出力します。logcat コマンドと $ANDROID_LOG_TAGS 環境変数の詳細については、logcat ページのログ出力をフィルタリングするをご覧ください。

$ADB_TRACE 環境変数には、ログに記録するデバッグ情報のカンマ区切りリストが格納されます。有効な値として、alladbsocketspacketsrwxusbsyncsysdepstransportjdwp を自由に組み合わせることができます。

logcat コマンドライン ツールもご覧ください。

セキュリティ コマンド 説明
disable-verity userdebug ビルドに対する dm-verity チェックを無効にします。dm-verity オプションを使用すると、ユーザーがデバイスを起動したときに、最後に使用したときと同じ状態になります。詳細については、セキュアブートをご覧ください。
enable-verity userdebug ビルドに対する dm-verity チェックを再度有効にします。dm-verity オプションを使用すると、ユーザーがデバイスを起動したときに、最後に使用したときと同じ状態になります。詳細については、セキュアブートをご覧ください。
keygen file adb 公開鍵と秘密 RSA 暗号鍵を生成します。秘密鍵は file に保管されます。公開鍵は file.pub に保管されます。初めて USB 経由で接続する際に adb を使用する場合は、RSA キーペアが必要になります。デバイスに対する adb アクセス権限を明示的に付与するには、ホスト コンピュータの RSA キーを受け入れる必要があります。

$ANDROID_VENDOR_KEYS 環境変数を使用して、keygen コマンドで生成した 2048 ビット RSA 認証キーペアを格納しているファイルまたはディレクトリを指定します。このキーペアは、adb サーバーが生成した RSA キーペアに追加されています。

adb サーバーがキーを必要とする場合、まず adb サーバー キーストア ディレクトリを検索します。キーが見つからない場合、$ANDROID_VENDOR_KEYS 環境変数をチェックして格納場所を探します。それでもキーが見つからない場合、ローカル adb サーバーは、新しいキーペアを生成して、adb サーバー キーストア ディレクトリに保存します。このため、'adb keygen' を実行する必要があるのは、新しい Android デバイスを製造している OEM だけに限られます。

adb サーバーによって生成されたキーペアは、デフォルトでは、adbkey(秘密鍵)および adbkey.pub(公開鍵)として以下のキーストア ディレクトリに格納されています。

  • Linux / Mac: $HOME/.android
  • Windows: %USERPOFILE%\.android
スクリプト コマンド 説明
wait-for [-transport] -state デバイスが指定状態になるのを待ちます。
  • state: 有効な値は、devicerecoverysideloadbootloader です。
  • transport: 有効な値は、usblocalany です。
get-state デバイスの adb 状態を出力します。adb 状態は、print offlinebootloaderdevice のいずれかになります。詳細については、デバイスのクエリを行うをご覧ください。
get-serialno adb デバイスのシリアル番号文字列を出力します。詳細については、デバイスのクエリを行うをご覧ください。
get-devpath adb デバイスパスを出力します。
remount /system パーティション、/vendor パーティション、/oem パーティションを読み取り / 書き込みモードで再マウントします。
reboot [bootloader | recovery | sideload | sideload-auto-reboot ] デバイスを再起動します。このコマンドは、デフォルトでシステム イメージを起動するように設定されていますが、bootloaderrecovery もサポートしています。
  • bootloader オプションは bootloader に再起動します。
  • recovery オプションは recovery に再起動します。
  • sideload オプションは recovery に再起動して、sideload モードを開始します。
  • sideload-auto-reboot オプションは sideload と同様ですが、サイドロード完了後に再起動します。
sideload otapackage 指定したフル OTA パッケージをデバイスにサイドロード(APK 形式でインストール)します。
root ルート パーミッションありで adbd を再起動します。
unroot ルート パーミッションなしで adbd を再起動します。
usb USB をリッスンしている adb サーバーを再起動します。
tcpip port-number 指定ポートで TCP をリッスンしている adb サーバーを再起動します。
内部デバッグ コマンド 説明
start-server adb サーバー プロセスが実行中かどうかをチェックします。
kill-server adb サーバー プロセスを終了します。
reconnect ホストからの再接続を強制します。
reconnect device デバイスからの再接続を強制して、再接続を強制します。
シェルコマンド 説明
shell ターゲット デバイス内でリモート インタラクティブ シェルを起動します。詳細については、シェルコマンドを発行するをご覧ください。
shell -e escape_char [-n] [-T] [-t] [-x] [command] ターゲット デバイス内でシェルコマンドを発行し、リモートシェルを終了します。以下のオプションを自由に組み合わせて使用します。
  • -e: エスケープ文字を指定します。エスケープ文字を使用したくない場合は、値 none を指定します。値を指定しなかった場合、デフォルト エスケープ文字(ダッシュ(-))が使用されます。
  • -n: stdin から読み取りを行いません。
  • -T: 疑似端末ユーティリティ(PTY)割り当てを無効にします。
  • -t: PTY 割り当てを強制します。
  • -x: リモート exit コードと stdout/stderr 分離を無効にします。

詳細については、シェルコマンドを発行するをご覧ください。

emu command エミュレータ コンソール コマンドを実行します。詳細については、コマンドラインからエミュレータを制御するをご覧ください。

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

shell コマンドを使用すると、デバイス上で adb リモートシェルに入っているかどうかにかかわらず、adb を通じてデバイス コマンドを発行できます。リモートシェルに入らずに単一のコマンドを発行するには、次のように shell コマンドを使用します。

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

あるいは、次のコマンドを使用して、デバイス上でリモートシェルに入ります。

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

リモートシェルを終了するには、Ctrl+D を押すか、「exit」と入力します。

シェルコマンド バイナリは、デバイスのファイル システムの「/system/bin/」に保存されます。

注: 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'" のようにします。

Activity Manager(am)を呼び出す

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

    am command
    

リモートシェルに入らずに直接 adb から Activity Manager コマンドを発行することもできます。たとえば、次のようになります。

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

表 2: 利用可能な Activity Manager コマンド

コマンド 説明
start [options] intent intent によって指定された Activity を起動します。

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

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

  • -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 引数を受け取る Activity Manager コマンドの場合、以下のオプションを使用してインテントを指定できます。

Package Manager(pm)を呼び出す

adb シェル内で Package Manager(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: 「dangerous」パーミッションだけをリスト表示します。
  • -u: ユーザーに表示されるパーミッションだけをリストします。
list instrumentation [options] すべてのテスト パッケージをリスト表示します。

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

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

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

  • -l: 転送がロックされたパッケージをインストールします。
  • -r: データを保持したまま、既存のアプリを再インストールします。
  • -t: テスト APK のインストールを許可します。Gradle によってテスト APK が生成されるのは、アプリの実行やデバッグを完了している場合や、Android Studio の [Build] > [Build APK] コマンドを使用した場合に限られます。Developer Preview SDK を使用して APK をビルドした場合(targetSdkVersion が数字ではなく文字の場合)、テスト APK をインストールするには、install コマンドに -t オプションを追加する必要があります。
  • -i installer_package_name: インストーラ パッケージ名を指定します。
  • -s: 共有マスストレージ(sdcard など)にパッケージをインストールします。
  • -f: 内部システムメモリにパッケージをインストールします。
  • -d: バージョン コードのダウングレードを許可します。
  • -g: アプリ マニフェストにリストされているすべてのパーミッションを付与します。
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 デバイスがサポートする最大ユーザー数を出力します。

Device Policy Manager(dpm)を呼び出す

Device Policy Manager(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 シェルコマンドを使用して出荷時設定にリセットできます。

    adb shell cmd testharness enable
    

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

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

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

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

他のシェルコマンド

利用可能なすべてのシェル プログラムのリストを取得するには、次のコマンドを使用します。

adb shell ls /system/bin

ほとんどのコマンドで、ヘルプを利用できます。

主要な adb シェルコマンドの一部を下記の表に示します。

表 6: 他の主要な adb シェルコマンド

シェルコマンド 説明
dumpsys システムデータを画面にダンプします。このコマンドライン ツールの詳細については、dumpsys をご覧ください。
dumpstate 状態をファイルにダンプします。
logcat [option]...  [filter-spec]... システムとアプリのログ記録を有効にして、出力を画面に表示します。

logcat コマンドライン ツールもご覧ください。

dmesg カーネルのデバッグ メッセージを画面に出力します。
start デバイスを起動(再起動)します。
stop デバイスの実行を停止します。
sqlite3 sqlite3 コマンドライン プログラムを起動します。

sqlite3 ツールには、テーブルのコンテンツを出力する .dump や、既存のテーブルに対する SQL CREATE ステートメントを出力する .schema などのコマンドがあります。SQLite コマンドをオンザフライで実行することもできます。

SQLite3 データベースは、フォルダ /data/data/package_name/databases/ に格納されます。

たとえば、次のようになります。


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

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