Android開発者がもはやWindows USBドライバーを必要としない理由
- 初期のAndroidプラットフォームでは、開発者はLinuxやMac OS XでUSBケーブルを通じてデバイスを接続できたが、Windowsユーザーはドライバーを探してインストールする必要があった。
- 現在では、ドライバーはもはや不要である。
USBドライバー/OS 101
- USBデバイスをポートに接続すると、オペレーティングシステムはUSBディスクリプタ階層を調べ、インターフェース用のドライバーを読み込む必要がある。
- ほとんどのUSBデバイスは、標準で提供される「Device Class」ドライバーで自動的に動作するよう、オペレーティングシステムに含まれている。
- Windowsは、内蔵の「Device Class」ドライバーが見つからない場合、またはより適したドライバーがある場合に、ユーザーがインストールしたドライバーを読み込む。
なぜ動かなかったのか
- ドライバーが見つからない場合、Linuxはusbfsを、Mac OSはIOKitを読み込み、ユーザー空間プログラムがデバイスにアクセスできるようにする。
- Windowsはエラーを報告してドライバーを読み込まないため、Androidデバイスにアクセスできなかった。
Androidドライバーとして動作していた理由
- ドライバーのインストール時に何が起きるのかを理解するため、Google USBドライバーの「頭脳」である
android_winusb.inf を調べる。
- WinUSBはLinuxのusbfsやMac OSのIOKitに似たUSBドライバーで、ユーザー空間プログラムがインターフェースを列挙し、エンドポイントに対して読み書きできるようにする。
AndroidデバイスがもはやWindowsドライバーを必要としない理由
- 以前の方法には明らかな欠陥があった。AndroidデバイスのVID/PIDが一覧にないと、winusbは読み込まれなかった。
- Windows 8では、INFファイルよりも優れた方法として、インターフェースに必要なドライバーをデバイス自身に直接問い合わせるようになった。
- デバイスがMicrosoft OSディスクリプタ(MOD)と互換性がある場合、Windowsは拡張互換ID OS機能ディスクリプタを要求する。
- これにより
winusb.sys が読み込まれ、ユーザー空間実行ファイルである adb がデバイスを開いてインターフェースを要求し、開発者は作業を開始できる。
どのデバイスがMicrosoft OSディスクリプタをサポートしているのか
- 個人的に所有しているPixelデバイスを見る限り、MODサポートはPixel 2(2017)とPixel 3a(2019)の間に始まったようだ。
拡張プロパティOS機能ディスクリプタ
- Pixel 8のようなより新しいデバイスは拡張プロパティOS機能ディスクリプタを備えており、GUID、ヘルプページ、URL、さらにはアイコンまで含めることができる。
GN⁺の意見
- この記事で最も重要な点は、Androidデバイスが今やWindowsで別途ドライバーをインストールしなくても開発に使えるようになったことだ。
- Microsoft OSディスクリプタと拡張互換ID OS機能ディスクリプタの導入により、ユーザー体験は大きく改善された。
- こうした変化はAndroid開発者に利便性をもたらし、開発環境のアクセシビリティ向上に貢献している。
1件のコメント
Hacker Newsのコメント
ADB(Android Debug Bridge)への愛
PixelデバイスでのMOD(Modern Operating Devices)サポート開始時期
Windows Precision Touchpadドライバー
ADBドライバーの進化
WindowsのUSBドライバー問題
Microsoft専用USB記述子の追加に対する批判
ADBトラブルシューティング経験
HIDプロトコル使用経験