6 月 3 日の「#Android11: The Beta Launch Show」にぜひご参加ください。

USB ホストとアクセサリの概要

Android は、さまざまな USB 周辺機器と Android USB アクセサリ(Android アクセサリ プロトコルを実装したハードウェア)を、USB アクセサリと USB ホストの 2 つのモードでサポートしています。USB アクセサリ モードでは、外部 USB ハードウェアが USB ホストとして動作します。アクセサリの例としては、ロボット コントローラ、ドッキング ステーション、診断機器や楽器、キオスク、カードリーダーなどがあります。これにより、ホスト機能を持たない Android 搭載デバイスが USB ハードウェアと情報をやり取りできるようになります。Android USB アクセサリは、Android 搭載デバイスと連携するように設計されている必要があり、また Android アクセサリ通信プロトコルに準拠している必要があります。USB ホストモードでは、Android デバイスがホストとして動作します。デバイスの例としては、デジタルカメラ、キーボード、マウス、ゲーム コントローラなどがあります。幅広い用途や環境向けに設計された USB デバイスが、そうしたデバイスと正しく通信できる Android アプリと情報をやり取りすることが可能です。

図 1 は 2 つのモードの違いを示しています。Android 搭載デバイスをホストモードにすると、Android デバイスは USB ホストとして動作し、バスに電源を供給します。Android 搭載デバイスを USB アクセサリ モードにすると、接続された USB ハードウェア(この場合は Android USB アクセサリ)がホストとして動作し、バスに電源を供給します。

図 1. USB ホストモードとアクセサリ モード

USB アクセサリ モードとホストモードは、Android 3.1(API レベル 12)以降のプラットフォームで直接サポートされています。また、幅広いデバイスをサポートするために、USB アクセサリ モードは Android 2.3.4(API レベル 10)にもアドオン ライブラリとして移植されています。デバイス メーカーは、デバイスのシステム イメージにこのアドオン ライブラリを含めるかどうかを選択できます。

注: USB ホストモードとアクセサリ モードのサポートは、プラットフォーム レベルに関係なく、最終的にはデバイスのハードウェアに依存します。USB ホストとアクセサリをサポートするデバイスを、<uses-feature> 要素を使用してフィルタできます。詳しくは、USB アクセサリホストについてのドキュメントをご覧ください。

デバッグに関する考慮事項

USB アクセサリまたはホストの機能を使用するアプリをデバッグする際、通常は USB ハードウェアを Android 搭載デバイスに接続する可能性が高いと考えられますが、そのようにすると、USB を介した Android 搭載デバイスへの adb 接続が確立されません。ネットワーク接続を介して、引き続き adb にアクセスできます。ネットワーク接続を介して adb を有効にする手順は次のとおりです。

  1. Android 搭載デバイスを USB 経由でパソコンに接続します。
  2. SDK の platform-tools/ ディレクトリに移動し、コマンド プロンプトで adb tcpip 5555 と入力します。
  3. adb connect <device-ip-address>:5555 と入力します。これで Android 搭載デバイスに接続され、adb logcat などの通常の adb コマンドを使用できるようになります。
  4. USB をリッスンするようにデバイスを設定するには、adb usb と入力します。