Save the date! Android Dev Summit is coming to Mountain View, CA on November 7-8, 2018.

Android Debug Bridge

Android Debug Bridge(adb)は、エミュレータ インスタンスや接続された Android 端末と通信できる用途の広いコマンドライン ツールです。また、アプリのインストールやデバッグなどのさまざまな端末アクションを支援し、エミュレータや接続された端末でさまざまなコマンドを実行するときに使用できる Unix シェルへのアクセスを提供します。adb は、次の 3 つのコンポーネントを含むクライアントサーバー プログラムです。

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

adb ツールは、android_sdk/platform-tools/ にあります。

adb の仕組み

adb クライアントを起動すると、クライアントは、既に実行されている adb サーバー プロセスがあるかどうかを最初に確認します。サーバー プロセスがない場合、クライアントはサーバー プロセスを起動します。サーバーが起動すると、サーバーはローカル TCP ポート 5037 にバインドされ、adb クライアントから送信されたコマンドをリッスンします。すべての adb クライアントはポート 5037 を使用して adb サーバーと通信します。

次に、サーバーは、実行されているすべてのエミュレータ / 端末インスタンスへの接続をセットアップします。サーバーは、エミュレータ / 端末が使用する 5555~5585 の範囲で奇数番号のポートをスキャンすることによりエミュレータ / 端末インスタンスを見つけます。サーバーは adb デーモンを見つけると、そのポートへの接続をセットアップします。各エミュレータ / 端末インスタンスは連続したポートのペア(コンソール接続用の偶数番号のポートと adb 接続用の奇数番号のポート)を取得することに注意してください。次に例を示します。

エミュレータ 1、コンソール: 5554
エミュレータ 1、adb: 5555
エミュレータ 2、コンソール: 5556
エミュレータ 2、adb: 5557

上記のように、ポート 5555 で adb に接続されているエミュレータ インスタンスは、ポート 5554 でリッスンするコンソールのインスタンスと同じです。

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

端末での adb デバッグの有効化

USB を介して接続されている端末で adb を使用するには、[Developer options] に下にある端末のシステム設定で [USB debugging] を有効にする必要があります。

Android 4.2 以降のバージョンでは、デフォルトで [Developer options] 画面は表示されません。使用できるようにするには、[Settings] > [About phone] で [Build number] を 7 回タップします。設定画面に戻ると、下に [Developer options] が表示されます。

一部の端末では、[Developer options] 画面が別の場所にあるか、別の名前になっていることがあります。

これで、USB を介して端末を接続できます。android_sdk/platform-tools/ ディレクトリから adb devices を実行すると、端末が接続されていることを確認できます。接続されていれば、「device」として端末名が表示されます。

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

USB を介して端末に接続する方法の詳細については、ハードウェア端末上でのアプリの実行をご覧ください。

Wi-Fi を介した端末への接続

通常、adb は USB を介して使用されます。ただし、次に説明するように、Wi-Fi を介して使用することもできます。

  1. Android 端末と adb ホスト コンピュータを一般的なアクセス可能な Wi-Fi ネットワークに接続します。すべてのアクセス ポイントが適切であるとは限らないことに注意してください。adb をサポートするファイアウォールが適切に設定されているアクセス ポイントを使用する必要がある場合があります。

    注: Android Wear 端末に接続する場合は、Wi-Fi に接続されているスマートフォンで Bluetooth を停止することにより、Android Wear 端末が Wi-Fi に強制的に接続するようにします。

  2. USB ケーブルを介して端末をホスト コンピュータに接続します。
  3. ポート 5555 で TCP/IP 接続をリッスンするようにターゲット端末を設定します。
    $ adb tcpip 5555
    
  4. ターゲット端末から USB ケーブルを切り離します。
  5. Android 端末の IP アドレスを確認します。たとえば、Nexus 端末では、[Settings] > [About tablet](または、[About phone])> [Status] > [IP address] で IP アドレスを確認することができます。または、Android Wear 端末では、[Settings] > [Wi-Fi Settings] > [Advanced] > [IP address] で IP アドレスを確認することができます。
  6. IP アドレスで識別した端末に接続します。
    $ adb connect device_ip_address
    
  7. ホスト コンピュータがターゲット端末に接続されていることを確認します。
    $ 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

このコマンドを実行すると、adb は各インスタンスに関する次のステータス情報を出力します。

  • シリアル番号 - コンソール ポート番号でエミュレータ / 端末インスタンスを一意に識別するために adb が作成する文字列。シリアル番号の形式は、type-console-port です。シリアル番号の例: emulator-5554
  • 状態 - インスタンスの接続状態は次のいずれかです。
    • offline - インスタンスが adb に接続されていないか、インスタンスが応答しません。
    • device - インスタンスが adb サーバーに接続されています。Android システムの起動中にインスタンスが adb に接続するため、この状態はシステムが完全に起動して動作中であることを示しているわけではないことに注意してください。ただし、システムの起動が完了すると、この状態は、エミュレータ / 端末インスタンスの通常の動作状態になります。
    • no device - 接続されているエミュレータ / 端末がありません。

出力は次のような形式になります。

List of devices attached
serial_number state

次に、devices コマンドとその出力の例を示します。

adb devices
List of devices attached
emulator-5554  device
emulator-5556  device
emulator-5558  device

特定の端末へのコマンドの送信

複数のエミュレータ / 端末インスタンスが実行されている場合、adb コマンドを発行するときに、ターゲット インスタンスを指定する必要があります。これを指定するには、コマンドで -s オプションを使用します。-s オプションの使用方法は次のとおりです。

adb -s serial_number command 

上記のように、adb によって割り当てられたシリアル番号を使用して、コマンドのターゲット インスタンスを指定します。devices コマンドを使用して、実行中のエミュレータ / 端末インスタンスのシリアル番号を取得することができます。次に例を示します。

adb -s emulator-5556 install helloWorld.apk

複数の端末が利用できる場合、ターゲット エミュレータ / 端末インスタンスを指定せずにコマンドを発行すると、adb でエラーが発生するので注意してください。

複数の端末(ハードウェアまたはエミュレートされたハードウェア)が利用でき、その中にエミュレータが 1 つしかない場合は、-e オプションを使用して、そのエミュレータにコマンドを送信します。同様に、複数の端末が存在し、その中にハードウェア端末が 1 つしかない場合は、-d オプションを使用して、そのハードウェア端末にコマンドを送信します。

アプリのインストール

adb を使用して開発コンピュータからアプリをコピーし、エミュレータ / 端末インスタンスにそのアプリをインストールすることができます。これを行うには、install コマンドを使用します。このコマンドは、インストールする APK ファイルへのパスを指定して使用する必要があります。

adb install path_to_apk

エミュレータ / 端末インスタンスにインストールできる APK ファイルを作成する方法の詳細については、アプリをビルドして実行するをご覧ください。

Android Studio を使用している場合は、エミュレータ / 端末にアプリをインストールするために、adb(または aapt)を直接使用する必要はないことに注意してください。代わりに、Android Studio がアプリのパッケージ化とインストールを処理します。

ポート転送のセットアップ

forward コマンドを使用して、任意のポート転送をセットアップすることができます。つまり、特定のホストポートでリクエストをエミュレータ / 端末インスタンスの別のポートに転送することができます。ホストポート 6100 からエミュレータ / 端末ポート 7100 への転送をセットアップする方法は次のとおりです。

adb forward tcp:6100 tcp:7100

次に示すように、adb を使用して、名前付きの抽象的な UNIX ドメイン ソケットへの転送をセットアップすることもできます。

adb forward tcp:6100 local:logd 

端末への / 端末からのファイルのコピー

adb コマンド 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 コマンド

カテゴリ コマンド 説明 コメント
ターゲット端末 -d 接続されている USB 端末のみに adb コマンドを送信します。 複数の USB 端末が接続されている場合、エラーが返されます。
-e 実行中のエミュレータ インスタンスのみに adb コマンドを送信します。 複数のエミュレータ インスタンスが実行されている場合、エラーが返されます。
-s serial_number adb によって割り当てられたシリアル番号(「emulator-5556」など)で参照される特定のエミュレータ / 端末インスタンスに adb コマンドを送信します。 特定のエミュレータ / 端末インスタンスへのコマンドの送信をご覧ください。
全般 devices 接続されているすべてのエミュレータ / 端末インスタンスのリストを出力します。 詳細は、エミュレータ / 端末インスタンスの照会をご覧ください。
help サポートされる adb コマンドのリストを出力します。  
version adb のバージョン番号を出力します。  
デバッグ logcat [option] [filter-specs] 画面にログデータを出力します。  
bugreport バグレポートのために、画面に dumpsysdumpstate、および logcat データを出力します。  
jdwp 任意の端末で利用できる JDWP プロセスのリストを出力します。 forward jdwp:pid ポート転送仕様を使用して、特定の JDWP プロセスに接続することができます。以下に例を示します。
adb forward tcp:8000 jdwp:472
jdb -attach localhost:8000
データ install path_to_apk エミュレータ / 端末に Android アプリ(APK ファイルへの完全パスとして指定される)をプッシュします  
pull remote local 指定されたファイルをエミュレータ / 端末インスタンスから開発コンピュータにコピーします。  
push local remote 指定されたファイルを開発コンピュータからエミュレータ / 端末インスタンスにコピーします。  
ポートとネットワーク forward local remote 指定されたローカルポートからエミュレータ / 端末インスタンスの指定されたリモートポートにソケット接続を転送します。 ポート仕様には、次のスキームが使用できます。
  • tcp:port_number
  • local:unix_domain_socket_name
  • dev:character_device_name
  • jdwp:pid
ppp tty [parm]... USB を介して PPP を実行します。
  • tty - PPP ストリームの tty。例: dev:/dev/omap_csmi_ttyl
  • [parm]... - defaultroutelocalnotty など、0 個以上の PPP/PPPD オプション。

PPP 接続を自動的に開始してはならないことに注意してください。

スクリプト get-serialno adb インスタンスのシリアル番号文字列を出力します。 詳細は、エミュレータ / 端末インスタンスの照会をご覧ください。
get-state エミュレータ / 端末インスタンスの adb 状態を出力します。
wait-for-device 端末がオンラインになるまで(つまり、インスタンスの状態が device になるまで)実行をブロックします。 このコマンドは他の adb コマンドの先頭に付加することができます。その場合、他のコマンドを発行する前に、エミュレータ / 端末インスタンスが接続されるまで adb は待機します。次に例を示します。
adb wait-for-device shell getprop
このコマンドを付加しても、システム全体が完全に起動するまで adb は待機しないことに注意してください。そのため、システムが完全に起動している必要のある他のコマンドに、このコマンドを付加しないでください。たとえば、install は、システムが完全に起動した後にのみ利用可能になる Android Package Manager を必要とします。次のコマンドを例として説明します。
adb wait-for-device install app.apk
このコマンドは、エミュレータ / 端末インスタンスが adb サーバーに接続されるとすぐに install コマンドを発行しますが、その時点で Android システムが完全に起動していないため、エラーが発生します。
サーバー start-server adb サーバー プロセスが実行されているかどうかを確認し、実行されていない場合は、そのプロセスを起動します。  
kill-server adb サーバー プロセスを終了します。  
シェル shell ターゲット エミュレータ / 端末インスタンスでリモートシェルを起動します。 詳細は、shell コマンドの発行をご覧ください。
shell shell_command ターゲット エミュレータ / 端末インスタンスで shell コマンドを発行してから、リモートシェルを終了します。

shell コマンドの発行

shell コマンドを使用すると、エミュレータ / 端末で adb リモートシェルに入っているかどうかに関係なく、adb から端末コマンドを発行できます。リモートシェルに入らずに単一のコマンドを発行するには、次のように shell コマンドを使用します。

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

または、次のコマンドを使用して、エミュレータ / 端末でリモートシェルに入ります。

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

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

shell コマンドのバイナリは、エミュレータまたは端末のファイル システム /system/bin/ に格納されています。

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 として出力します。

インテントの引数の仕様をご覧ください。

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 のインストールを許可します。
  • -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: Auto - システムにより最適な場所が決定されます。
  • 1: Internal - 端末の内部ストレージにインストールします。
  • 2: External - 外部メディアにインストールします。

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

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 端末でサポートされるユーザーの最大数を出力します。

スクリーンショットの撮影

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

画面の録画を停止するには、Control+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 ユーティリティを使用する場合は、次のような既知の制限事項に注意する必要があります。

  • 一部の端末では、ネイティブの画面解像度で録画できないことがあります。画面を録画するときに問題が発生した場合は、より低い画面解像度を使用してみてください。
  • 録画中の画面回転はサポートされていません。録画中に画面が回転すると、録画中の画面の一部がカットされます。

表 4 screenrecord オプション

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

その他の shell コマンド

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

adb shell ls /system/bin

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

表 5 は、主要な adb shell コマンドの一部です。

表 5 その他の adb shell コマンド

shell コマンド 説明 コメント
dumpsys システムデータを画面にダンプします。 Dalvik Debug Monitor Server(DDMS)ツールは、使いやすく統合されたデバッグ環境を提供します。
dumpstate 状態をファイルにダンプします。
logcat [option]... [filter-spec]... システムとアプリのログ記録を有効にし、出力を画面に表示します。
dmesg カーネルのデバッグ メッセージを画面に表示します。
start エミュレータ / 端末インスタンスを起動(再起動)します。  
stop エミュレータ / 端末インスタンスの実行を停止します。