adbコマンドなどを使うためには、以前はAndroid SDK自体をインストールする必要がありました。しかし、最近では、SDKに含まれる一部のツールのみをダウンロードすることが可能になっています。ちょっと前回と内容が前後しますが、今回は、adbコマンドなどのツールのインストールや基本的な使い方について解説します。
Platform toolsのダウンロードとインストール
Platform toolsは、以下のページからダウンロードが可能です。
・SDK Platform Tools Release Notesのページ(英語)
https://developer.android.com/studio/releases/platform-tools.html
ここには、Windows、Mac、Linux用のPlatform toolsがあるので必要なものをダウンロードします。ただし、解説としては、Windowsの場合のみを説明します。
Platform toolsは、Zip圧縮ファイル形式で配布されています。ダウンロードしエクスプローラーで開くと、platform-toolsというフォルダがあるので、これを適当なフォルダへコピーします。あとのことを考えると、「AndroidSDK」といった名前のフォルダを作り、その下に「platform-tools」フォルダを置くといいでしょう。また、使うときの利便性をあげるため、platform-toolsフォルダのフルパスを環境変数Pathに設定しておきます。
アンドロイド機器のUSB接続
adbコマンドのUSB接続は、アンドロイドデバイス接続の基本です。ただし、これを可能にするには、
1.アンドロイド機器で開発者向け機能をオン(写真01)
2.アンドロイド機器でADBデバッグをオン(写真02)
3.アンドロイド機器でUSBデバッグをオン
4.USBデバッグ用デバイスドライバーの組み込み
・「Google USB ドライバを入手する」
https://developer.android.com/studio/run/win-usb.html
・「OEM USB ドライバのインストール」
https://developer.android.com/studio/run/oem-usb.html
5.アンドロイド機器で接続先PCを許可/登録(写真03)
といった作業を行う必要があります。
アンドロイド機器を特定する
adbとは、「Android Debug Bridge」つまり、デバッグを行うためにPCとアンドロイド機器(および開発用のアンドロイドエミュレーター)を接続するためのものです。本体はサーバーとして実行されているadb.exeで、ユーザーが打ち込むコマンドは、サーバーを制御するためのものです。
adbコマンドは、adbサーバーをコマンドラインから制御するためのもの、と理解しておくことでadb.exeで利用可能な「サブコマンド」の意味がはっきりします。なお、サーバーは、最初にadbコマンドを実行したとき(adb.exeを起動したとき)、サーバーとして自分自身を起動して、コマンドラインで指定されたサブコマンドを実行します。
adbコマンドの基本は
adb.exe [デバイスの指定] サブコマンド
となっていて、アンドロイド機器が1つだけの場合のみ「デバイスの指定」を省略できます。adbコマンドでは、USB接続されたアンドロイドデバイスのほかに、エミュレーターや無線LAN、Bluetoothによる接続をサポートしています。このとき、複数のデバイスが同時に1つのPCに接続する可能性があります。複数のアンドロイド機器がある場合、adbコマンドで指定する処理は、対象となるデバイスを特定する必要があります。
adbコマンドで特定のデバイスを指定する基本的な方法が「シリアル番号」です。現在接続しているデバイスのシリアル番号は、「adb.exe devices」コマンドで表示させることが可能です。このとき、各行は、「シリアル番号」(Serial No)と「状態」(State)が表示されます。最初に表示されているのがシリアル番号ですが、ネットワーク接続などの場合には、IPアドレスとポート番号を組みあわせたものになります。
「状態」はわかりにくいのですが、 「unauthorized」、「offline」、「device」などの表示があります(表01)。このうち、デバイス側が接続を許可し、adbコマンドが有効なのが「device」状態です。それ以外は、接続していることはadbに認識されていますが、コマンドを処理できる状態にありません。offlineとなっている場合、物理的な接続は行われているものの、何らかのエラーが起きている可能性があります。このような場合、USBコネクタを接続しなおす、adbサーバーを再起動(adb.exe kill-serverコマンド)行うなどしてみます。それでもダメな場合には、「設定 ⇒ 開発者向けオプション」で「USBデバッグ許可の取り消し」を使い、接続許可のデータベースを一回クリアしてみます。
■表01 | |
状態名 | 概要 |
---|---|
device | デバイスが接続を許可しコマンドが使える状態 |
offline | 接続しているが応答ができない(エラーの可能性あり) |
unauthorized | デバイス側が接続許可を出していない |
bootloader | デバイスはbootloaderが動作中 |
recovery | デバイスはリカバリーモード中 |
sideload | システムをsideloadでアップデート中 |
adbコマンドを使う場合、対象アンドロイド機器のシリアル番号がわかれば、以後のadbコマンドは、「-s シリアル番号」とすることで、対象とするアンドロイド機器を指定できます。
たとえば、shellサブコマンドを使う場合、2つ以上のアンドロイド機器が接続しているなら、そのうちの1つをシリアル番号を使って指定するときには、
adb -s シリアル番号 shell シェルコマンド
などとします(写真04)。
ただし、シリアル番号は、アルファベットと数字の羅列で打ち間違いしやすく、前回解説したネットワークやBluetooth経由の場合には、IPアドレスを含む形式などになることで文字数が多くなるといった「面倒さ」があります。なので、コマンドラインでデバイスを指定する場合には、トランスポートIDを使うと便利です。
トランスポートIDは、前述のdeviceサブコマンドに「-l」オプションを付け、
adb.exe devices -l
として表示させることができます。トランスポートIDがわかっていれば、アンドロイド機器を区別するためには、「-t トランスポートID」とすることでも行えます。たとえば、先ほどのシリアル番号を使ったシェルコマンドは、(写真05)のようになります。
トランスポート番号は、シリアルIDと違って短い数値なので指定しやすいのですが、接続するときに割り振られる番号なので毎回違った番号が使われます。逆にシリアル番号は、デバイス固有の番号になるため、接続すれば、毎回同じものになります。このため、スクリプトなどを使って特定の相手を指定する場合にシリアル番号を利用することができますが、トランスポート番号はこのような使い方ができません。
なお、adbコマンドには、USB接続デバイスを意味する「-d」、ネットワーク接続デバイスを意味する「-e」というオプションもあり、それぞれデバイスが1つだけ接続しているときには、このオプションを指定してデバイスを特定することもできます。ただし、同じ接続、たとえばUSB接続しているアンドロイド機器が複数ある場合には「-d」オプションの指定はエラーになってしまいます。
ですが、簡易なオプション指定として利用できる場面もあります。たとえば、Bluetoothや無線LANで接続しているアンドロイド機器とUSB接続している機器の2つがある場合には、「adb.exe -d サブコマンド」と「adb.exe -e サブコマンド」で、2つの機器を区別してサブコマンドを送ることができます。