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 デバッグ] を有効にする必要があります。Wi-Fi 接続したデバイスで adb を使用するには、Wi-Fi 経由でデバイスに接続するをご覧ください。
Android 4.2 以上の場合、[開発者向けオプション] 画面はデフォルトで非表示になっています。表示するには、[設定] > [デバイス情報] に移動して、[ビルド番号] を 7 回タップします。前の画面に戻ると、下部に [開発者向けオプション] が表示されます。
デバイスによって、[開発者向けオプション] の表示位置や名前が異なる場合があります。
これで、デバイスと USB を接続できるようになります。デバイスが接続されていることを確認するには、android_sdk/platform-tools/
ディレクトリから adb devices
を実行します。接続されている場合、デバイス名が「device」のリストに表示されます。
注: Android 4.2.2 以上を搭載するデバイスを接続すると、このパソコン経由のデバッグを許可する RSA 鍵を受け入れるかどうかを尋ねるダイアログが表示されます。RSA 鍵は、ユーザー デバイスを保護するセキュリティの仕組みです。デバイスのロックを解除してこのダイアログで許可しない限り、USB デバッグや他の adb コマンドを実行できません。
USB 経由でデバイスに接続する方法について詳しくは、ハードウェア デバイス上でのアプリの実行をご覧ください。
Wi-Fi 経由でデバイスに接続する(Android 11 以降)
Android 11 以降では、Android Debug Bridge(adb)を使用してワークステーションからアプリをワイヤレスでデプロイおよびデバッグできます。たとえば、USB 経由でデバイスを物理的に接続することなく、デバッグ可能なアプリを複数のリモート デバイスにデプロイできるため、ドライバのインストールなど、USB 接続に関する一般的な問題に対処する必要がなくなります。
ワイヤレス デバッグを使用するには、ペア設定コードを使用してデバイスをワークステーションとペア設定する必要があります。ワークステーションとデバイスは同じワイヤレス ネットワークに接続する必要があります。デバイスに接続する手順は次のとおりです。

- ワークステーションで SDK Platform-Tools の最新バージョンに更新します。
- デバイスで開発者向けオプションを有効にします。
- [ワイヤレス デバッグ] オプションを有効にします。
- [このネットワークでワイヤレス デバッグを許可しますか] というダイアログで [許可] をクリックします。
- [ペア設定コードによるデバイスのペア設定] を選択します。デバイスに表示されるペア設定コード、IP アドレス、ポート番号をメモしておきます(図参照)。
- ワークステーションでターミナルを開いて、
android_sdk/platform-tools
に移動します。 adb pair ipaddr:port
を実行します。 ステップ 5 の IP アドレスとポート番号を使用します。- メッセージが表示されたら、ステップ 5 で受け取ったペア設定コードを入力します。デバイスが正常にペア設定されたことを示すメッセージが表示されます。
none Enter pairing code: 482924 Successfully paired to 192.168.1.130:37099 [guid=adb-235XY]
- (Linux または Microsoft Windows のみ)
adb connect ipaddr:port
を実行します。[ワイヤレス デバッグ] の下の IP アドレスとポートを使用します。
図 2. ワイヤレス adb の IP とポート番号。
Wi-Fi 経由でデバイスに接続する(Android 10 以前)
adb は通常、USB 経由でデバイスと通信しますが、下記のように、Wi-Fi 経由で adb を使用することもできます。
- Android 11 以降を搭載したデバイスに接続するには、ハードウェア デバイス上でのアプリの実行の Wi-Fi のセクションをご覧ください。
- これより前のバージョンの Android を搭載したデバイスに接続するには、まず最初に USB 経由で行わなければならない手順がいくつかあります。手順は以下のとおりです。
- 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
より優先されます。
次の例では、接続されているデバイスのリストを取得し、該当デバイスのシリアル番号を使用してデバイスに 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 コマンドの詳細なリストは、次のコマンドを使用して確認できます。
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 からアクティビティ マネージャー コマンドを発行することもできます。次に例を示します。
adb shell am start -a android.intent.action.VIEW
表 2. 利用可能なアクティビティ マネージャー コマンド
コマンド | 説明 |
---|---|
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
引数を受け取るアクティビティ マネージャー コマンドの場合、以下のオプションを使用してインテントを指定できます。
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 に設定します。デフォルト値は、デバイスのネイティブ画面解像度です(サポートされている場合)。サポートされていない場合、1280x720 になります。最適な結果を得るには、デバイスの 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 コマンドライン ドキュメントをご覧ください。