Android Debug Bridge (adb) とは?
Android の SDK (Software Development Kit) には、 Android のアプリケーション開発を支援するためのツールが多数用意されています。
この資料ではアンドロイド・デバッグ・ブリッジ (Android Debug Bridge, ADB) というツールについて、その仕組み、何ができるのか、ということを説明します。
adb とは?
Android Debug Bridge は adb と省略されます。 これは Android SDK の platform-tools に含まれるツールです。
このツールを用いると、現在利用可能なデバイス・エミュレータの列挙、シェルコマンドの発行、ファイルの転送などが行えます。
Eclipse から Android アプリをビルドしたときも、裏側で adb を用いてエミュレータまたは実際のデバイスに接続します。
adb の仕組み
adb は主に adb クライアント と adb サーバー から構成されます。
adb クライアントを起動すると、adb クライアントは現在実行中の adb サーバーを探します。サーバーが見つからない場合は、adb サーバープロセスを起動します。
adb サーバープロセスは起動後 TCP ポートの 5037 番で待ち受けを開始します。 adb クライアントは、5037 番ポートに接続に行きます。
adb サーバーを明示的に起動するには、 adb start-server コマンドを実行します。
$ sudo ./adb start-server * daemon not running. starting it now on port 5037 * * daemon started successfully *
少し細かい話になりますが adb サーバーは、 5555 番ポートから奇数番を 5585 番までスキャンをして、エミュレータ・デバイスを探しに行きます。 エミュレータ・デバイスを見つけたら、adb サーバーはそれへのコネクションを確立します (adb コネクション)。
エミュレータ/デバイスは 5555番から 5585 番までの奇数番号で adb コネクションを待ち受け、偶数番 (5554番から5584番) でコンソール・コネクション (console connection) を確立します。
adb サーバは複数のエミュレータ/デバイスに接続し、また複数の adb クライアントが接続します。
現在接続中のエミュレータ/デバイスを確認するには、adb devices コマンドを使います。
$ ./adb devices List of devices attached 0160611A0A019007 device emulator-5554 device
エミュレータのデバイス名は emulator-<コンソールコネクションのポート番号> です。
ちなみに、次のように no permissions となる場合があります。
$ ./adb devices List of devices attached ???????????? no permissions emulator-5554 device
これは、 adb が root で起動していないときに発生しますので、一旦 adb kill-server で adb サーバーを停止してからルートで adb start-server することで解決できる場合があります。
Android Device Chooser
Eclipse から開発しアプリケーションをビルドする場合も、複数のデバイスが接続されていることを検出すると、どの端末上で実行するか選択する画面がでてきます。
これがすなわち、 adb に接続しているデバイスということになります。
その他、apk ファイルに対する install コマンドなど、 adb を使ってやれることはまだあります。ここでは adb の大まかな仕組みについて説明しました。