6 ポイント 投稿者 GN⁺ 2024-01-02 | 1件のコメント | WhatsAppで共有

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件のコメント

 
GN⁺ 2024-01-02
Hacker Newsのコメント
  • ADB(Android Debug Bridge)への愛

    • ADBは非常に便利なツールで、VPN経由のポート再ルーティングも可能。
    • Android開発者でなくてもスイスアーミーナイフのような存在で、Androidを好む大きな理由の1つ。
    • 仕事用プロファイルによって業務関連の資料と個人情報への侵害要素を分離できるため、2台目の電話機は不要。
  • PixelデバイスでのMOD(Modern Operating Devices)サポート開始時期

    • 個人的なPixelコレクションから、Pixel 2(2017)とPixel 3a(2019)の間でMODサポートが始まったように見える。
    • Pixel 3にも適用されていたはずで、Android 11をサポートするすべてのCTS(Compatibility Test Suite)準拠デバイスに適用される。
    • OEMはUSB HALで簡単な値を設定してCTSテストに合格する必要がある。
  • Windows Precision Touchpadドライバー

    • Bingxing Wangが開発したApple MacBook/Magic Trackpad 2向けWindows Precision Touchpad実装への言及。
  • ADBドライバーの進化

    • 過去には、Windowsは新しいデバイスごとに.infドライバーファイルをインストールする必要があったが、Windows 8以降ではデバイスがMicrosoft OS Descriptorsを通じて必要なドライバーを通知する。
    • これによりユーザー体験が改善され、開発者だけでなく、より良いAndroid体験を望むユーザーにとっても重要。
  • WindowsのUSBドライバー問題

    • WindowsではUSBドライバーが混乱しやすく、ときに危険ですらある。
    • Linuxでは問題なく動作するArduinoクローンが、Windowsでは使えないケースを一部の学生で目にした。
    • Windowsが「偽物」と判断したデバイスを無効化するドライバーを自動インストールする問題があり、ストレージデバイス以外をWindowsマシンに接続するのは最後の手段と見なされる。
  • Microsoft専用USB記述子の追加に対する批判

    • 携帯電話メーカーがMicrosoft専用USB記述子を追加しなければならないことへの批判。
    • WindowsがLinuxやmacOSのような標準化されたユーザー空間インターフェースに置き換えるのではなく、Microsoft専用機能を要求するのは不合理。
  • ADBトラブルシューティング経験

    • 最近Lenovo M7を使ってマジックミラープロジェクトを進める中で、ADBの問題に直面した。
    • 関連するStack Overflowの投稿をすべて探して試したが成功せず、この問題が解決済みだと聞いて不思議に感じた。
  • HIDプロトコル使用経験

    • USB接続デバイスでraw HIDプロトコルを使用しており、すべてのバージョンのWindowsでうまく動作する。
    • すべての要件に適しているわけではないが、特定のケースにはよく合う。