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 を使用するための特別な手順が記載されています。
- Android デバイスと adb ホスト コンピュータを、両方がアクセス可能な Wi-Fi ネットワークに接続します。必ずしもすべてのアクセス ポイントが適切であるとは限りません。adb を適切にサポートするようファイアウォールが設定されているアクセス ポイントを使用する必要がある場合があります。
- Wear OS デバイスに接続する場合は、そのデバイスとペア設定されているスマートフォンの Bluetooth をオフにします。
- USB ケーブル経由で、デバイスとホスト コンピュータを接続します。
- ポート 5555 で TCP/IP 接続をリッスンするようにターゲット デバイスを設定します。
adb tcpip 5555
- ターゲット デバイスから USB ケーブルを切り離します。
- Android デバイスの IP アドレスを確認します。たとえば、Nexus デバイスの場合、[設定] > [タブレット情報](または、[端末情報])> [端末の状態] > [IP アドレス] で、IP アドレスを確認することができます。また、Wear OS デバイスの場合、[設定] > [Wi-Fi 設定] > [詳細設定] > [IP アドレス] で、IP アドレスを確認することができます。
- 確認した IP アドレスを使用して、デバイスに接続します。
adb connect device_ip_address
- ホスト コンピュータがターゲット デバイスに接続しているか確認します。
$ adb devices List of devices attached device_ip_address:5555 device
これで準備が整いました。
adb 接続が失われた場合:
- Android デバイスと同じ Wi-Fi ネットワークにホストが接続したままであるか確認します。
adb connect
のステップを再度実行して再接続します。- 上記の手順で接続できない場合は、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
出力内には表示されないというケースが発生することがあります。この状況が発生するのは、以下のすべての条件が満たされた場合です。
- adb サーバーが稼働していない。
emulator
コマンドを使用する際、-port
オプションまたは-ports
オプションを追加し、5554~5584 の範囲内の奇数番号ポート値を指定した。- 選択した奇数番号ポートがビジー状態でなく、指定のポート番号でポート接続を確立できた。あるいは、選択した奇数番号ポートがビジー状態であったが、「要件 2」を満たすポートにエミュレータが切り替えた。
- エミュレータを起動した後に、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
コマンド内の local
と remote
は、ご利用の開発マシン(ローカル)とデバイス(リモート)のターゲット ファイル / ディレクトリのパスに置き換えてください。たとえば、次のようになります。
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 |
指定ローカルポートからデバイス上の指定リモートポートにソケット接続を転送します。以下の方法で、local ポートと remote ポートの両方を指定できます。
|
forward --remove local |
指定した転送済みソケット接続を削除します。 |
reverse --list |
デバイスからの逆ソケット接続をすべてリスト表示します。 |
reverse [--no-rebind] remote local
|
ソケット接続を逆向きにします。--no-rebind オプションを追加すると、指定ソケットが以前の reverse コマンドによってすでにバインド済みの場合にリバースが失敗するようになります。以下の方法で、local 引数と remote 引数の両方に対してポートを指定できます。
|
reverse --remove remote |
デバイスからの指定逆ソケット接続を削除します。 |
reverse |
デバイスからの逆ソケット接続をすべて削除します。 |
ファイル転送コマンド | 説明 |
push local remote |
ファイルやディレクトリを、ローカル デバイス(パソコン)から、デバイス上のリモート位置にコピーします。 |
pull [-a] remote local |
リモートのファイルやディレクトリをデバイスにコピーします。-a オプションを使用すると、ファイルのタイムスタンプやモードを保持できます。
|
sync [system|vendor|oem|data|all] |
ローカルビルドを、$ANDROID_PRODUCT_OUT 内の指定場所からデバイスに同期します。変更されたファイルはすべて、指定したパーティションからコピーされます。デフォルトでは、すべてのパーティションを同期します。Android プラットフォーム ソースをビルドするときに限り、このコマンドを使用します。アプリ デベロッパーは、このコマンドを使用する必要はありません。
$ANDROID_PRODUCT_OUT=/out/target/product/generic adb sync |
アプリ インストール コマンド | 説明 |
install [options] package
|
パッケージをデバイスにプッシュしてインストールします。以下のオプションがあります。
|
install-multiple
|
|
uninstall [-k] package |
このアプリ パッケージをデバイスから削除します。-k オプションを追加すると、データ ディレクトリやキャッシュ ディレクトリを保持できます。
|
バックアップ / 復元コマンド | 説明 |
backup [-f file ]-apk | -noapk ]-obb | -noobb ]-shared | -noshared ]-all ] [-system |-nosystem ] package_names |
デバイスのデータのアーカイブを file に書き込みます。ファイル名を指定しなかった場合、デフォルト ファイル名の backup.adb になります。-all オプションと -shared オプションを指定した場合、package リストは必須ではありません。他のオプションの使用方法は以下のとおりです。
|
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 ページのログ出力をフィルタリングするをご覧ください。
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 キーを受け入れる必要があります。
adb サーバーがキーを必要とする場合、まず adb サーバー キーストア ディレクトリを検索します。キーが見つからない場合、 adb サーバーによって生成されたキーペアは、デフォルトでは、
|
スクリプト コマンド | 説明 |
wait-for [-transport] -state
| デバイスが指定状態になるのを待ちます。
|
get-state |
デバイスの adb 状態を出力します。adb 状態は、print offline 、bootloader 、device のいずれかになります。詳細については、デバイスのクエリを行うをご覧ください。
|
get-serialno |
adb デバイスのシリアル番号文字列を出力します。詳細については、デバイスのクエリを行うをご覧ください。 |
get-devpath |
adb デバイスパスを出力します。 |
remount |
/system パーティション、/vendor パーティション、/oem パーティションを読み取り / 書き込みモードで再マウントします。 |
reboot [bootloader | recovery | sideload | sideload-auto-reboot ]
|
デバイスを再起動します。このコマンドは、デフォルトでシステム イメージを起動するように設定されていますが、bootloader と recovery もサポートしています。
|
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]
|
ターゲット デバイス内でシェルコマンドを発行し、リモートシェルを終了します。以下のオプションを自由に組み合わせて使用します。
詳細については、シェルコマンドを発行するをご覧ください。 |
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 を起動します。インテント引数の指定をご覧ください。 以下のオプションがあります。
|
startservice [options] intent
|
intent によって指定された Service を起動します。インテント引数の指定をご覧ください。 以下のオプションがあります。
|
force-stop package
|
package (アプリのパッケージ名)に関連付けられているすべてのものを強制停止します。
|
kill [options] package
|
package (アプリのパッケージ名)に関連付けられているすべてのプロセスを強制終了します。このコマンドが強制終了するのは、強制終了しても安全でユーザー エクスペリエンスに影響を及ぼさないプロセスだけに限られます。
以下のオプションがあります。
|
kill-all
|
すべてのバックグラウンド プロセスを強制終了します。 |
broadcast [options] intent
|
ブロードキャスト インテントを発行します。 インテント引数の指定をご覧ください。 以下のオプションがあります。
|
instrument [options] component
|
Instrumentation インスタンスでモニタリングを開始します。通常、ターゲット component の形式は test_package/runner_class です。以下のオプションがあります。
|
profile start process file
|
process でプロファイラを起動し、結果を file に書き込みます。
|
profile stop process
|
process でプロファイラを停止します。
|
dumpheap [options] process file
|
process のヒープをダンプし、file に書き込みます。以下のオプションがあります。
|
set-debug-app [options] package
|
デバッグするアプリの package を設定します。以下のオプションがあります。
|
clear-debug-app
|
以前 set-debug-app でデバッグするように設定されていたパッケージをクリアします。
|
monitor [options]
|
クラッシュまたは ANR のモニタリングを開始します。 以下のオプションがあります。
|
screen-compat {on | off} package
|
package の画面互換モードを制御します。
|
display-size [reset | widthxheight]
|
デバイスの表示サイズをオーバーライドします。このコマンドは、大きな画面のデバイスで低い画面解像度を再現したり、逆に、小さな画面のデバイスで高い画面解像度を再現したり、さまざまな画面サイズでアプリをテストする場合に役立ちます。
たとえば、次のようになります。 |
display-density dpi
|
デバイスの表示密度をオーバーライドします。このコマンドは、低密度画面のデバイスで高密度画面環境を再現したり、逆に、高密度画面のデバイスで低密度画面環境を再現したり、さまざまな画面密度でアプリをテストする場合に役立ちます。
たとえば、次のようになります。 |
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 のテキストをパッケージ名に含むパッケージだけを出力することもできます。以下のオプションがあります。
|
list permission-groups
|
既知のすべてのパーミッション グループを出力します。 |
list permissions [options] group
|
既知のすべてのパーミッションを出力します。必要に応じて、group 内のパーミッションだけを出力することもできます。以下のオプションがあります。
|
list instrumentation [options]
|
すべてのテスト パッケージをリスト表示します。 以下のオプションがあります。
|
list features
|
システムのすべての機能を出力します。 |
list libraries
|
現在のデバイスがサポートしているすべてのライブラリを出力します。 |
list users
|
システム上のすべてのユーザーを出力します。 |
path package
|
指定 package の APK へのパスを出力します。
|
install [options] path
|
path で指定されたパッケージをシステムにインストールします。以下のオプションがあります。
|
uninstall [options] package
|
システムからパッケージを削除します。 以下のオプションがあります。
|
clear package
|
パッケージに関連付けられているすべてのデータを削除します。 |
enable package_or_component
|
特定のパッケージまたはコンポーネント(「package/class」と記述)を有効にします。 |
disable package_or_component
|
特定のパッケージまたはコンポーネント(「package/class」と記述)を無効にします。 |
disable-user [options] package_or_component
|
以下のオプションがあります。
|
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
|
デフォルトのインストール場所を変更します。有効な場所の値は次のとおりです。
注: インストール場所の変更は、デバッグ目的の場合にのみ実行してください。インストール場所を変更すると、アプリが破損したり、想定外の動作が発生したりする可能性があります。 |
get-install-location
|
現在のインストール場所を返します。戻り値は次のとおりです。
|
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 をアクティブな管理者として設定します。
以下のオプションがあります。
|
set-profile-owner [options] component
|
component をアクティブな管理者として設定し、そのパッケージを既存ユーザーのプロファイル オーナーとして設定します。
以下のオプションがあります。
|
set-device-owner [options] component
|
component をアクティブな管理者として設定し、そのパッケージをデバイス オーナーとして設定します。
以下のオプションがあります。
|
remove-active-admin [options] component
|
アクティブな管理者を無効にします。アプリは、マニフェスト内で android:testOnly を宣言する必要があります。このコマンドは、デバイス オーナーとプロファイル オーナーも削除します。
以下のオプションがあります。
|
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 データベースは、フォルダ たとえば、次のようになります。 $ adb -s emulator-5554 shell $ sqlite3 /data/data/com.example.app/databases/rssitems.db SQLite version 3.3.12 Enter ".help" for instructions 詳細については、sqlite3 コマンドライン ドキュメントをご覧ください。 |