6 Punkte von GN⁺ 2024-01-02 | 1 Kommentare | Auf WhatsApp teilen

Warum Android-Entwickler keine Windows-USB-Treiber mehr benötigen

  • Auf der frühen Android-Plattform konnten Entwickler Geräte unter Linux oder Mac OS X per USB-Kabel verbinden, Windows-Nutzer mussten jedoch Treiber suchen und installieren.
  • Heute werden diese Treiber nicht mehr benötigt.

USB-Treiber/OS 101

  • Wenn ein USB-Gerät an einen Port angeschlossen wird, untersucht das Betriebssystem die USB-Deskriptor-Hierarchie und muss einen Treiber für die Schnittstelle laden.
  • Die meisten USB-Geräte funktionieren automatisch über integrierte Device Class-Treiber, die im Betriebssystem enthalten sind.
  • Windows lädt einen vom Benutzer installierten Treiber, wenn kein eingebauter Device Class-Treiber gefunden wird oder wenn ein besserer Treiber vorhanden ist.

Warum es früher nicht funktionierte

  • Wenn kein Treiber gefunden wird, lädt Linux usbfs und macOS IOKit, damit Programme im User Space auf das Gerät zugreifen können.
  • Windows meldete stattdessen einen Fehler und lud keinen Treiber, sodass kein Zugriff auf Android-Geräte möglich war.

Warum es mit dem Android-Treiber funktionierte

  • Um zu verstehen, was bei der Installation des Treibers passiert, wurde android_winusb.inf, das „Gehirn“ des Google-USB-Treibers, untersucht.
  • WinUSB ist ein USB-Treiber ähnlich wie usbfs unter Linux und IOKit unter macOS und ermöglicht Programmen im User Space, Schnittstellen aufzulisten und von Endpunkten zu lesen und auf sie zu schreiben.

Warum Android-Geräte keine Windows-Treiber mehr benötigen

  • Die frühere Methode hatte einen offensichtlichen Nachteil: Wenn die VID/PID eines Android-Geräts nicht in der Liste stand, wurde winusb nicht geladen.
  • Windows 8 fragt den für die Schnittstelle benötigten Treiber direkt beim Gerät an, was besser ist als der Weg über INF-Dateien.
  • Wenn das Gerät mit Microsoft OS Descriptors (MOD) kompatibel ist, fordert Windows den Extended Compat ID OS Feature Descriptor an.
  • Dadurch wird winusb.sys geladen, und die User-Space-Executable adb kann das Gerät öffnen und die Schnittstelle anfordern, sodass Entwickler direkt mit der Arbeit beginnen können.

Welche Geräte Microsoft OS Descriptors unterstützen

  • Nach Beobachtungen an persönlich genutzten Pixel-Geräten scheint die MOD-Unterstützung irgendwann zwischen dem Pixel 2 (2017) und dem Pixel 3a (2019) eingeführt worden zu sein.

Extended Properties OS Feature Descriptor

  • Neuere Geräte wie das Pixel 8 verfügen über einen Extended Properties OS Feature Descriptor, der GUIDs, Hilfeseiten, URLs und sogar Icons enthalten kann.

Meinung von GN⁺

  • Der wichtigste Punkt dieses Artikels ist, dass Android-Geräte unter Windows nun für die Entwicklung genutzt werden können, ohne dass separate Treiber installiert werden müssen.
  • Durch die Einführung von Microsoft OS Descriptors und des Extended Compat ID OS Feature Descriptor wurde die User Experience deutlich verbessert.
  • Diese Änderung erhöht den Komfort für Android-Entwickler und trägt dazu bei, den Zugang zu Entwicklungsumgebungen zu erleichtern.

1 Kommentare

 
GN⁺ 2024-01-02
Hacker-News-Kommentar
  • Begeisterung für ADB (Android Debug Bridge)

    • ADB ist ein sehr nützliches Tool und kann sogar Ports über ein VPN umleiten.
    • Selbst wenn man kein Android-Entwickler ist, ist es wie ein Schweizer Taschenmesser und einer der großen Gründe, Android zu bevorzugen.
    • Über das Arbeitsprofil lassen sich arbeitsbezogene Daten und datenschutzkritische private Inhalte trennen, sodass kein zweites Telefon nötig ist.
  • Seit wann Pixel-Geräte MOD (Modern Operating Devices) unterstützen

    • Anhand einer persönlichen Pixel-Sammlung scheint die MOD-Unterstützung irgendwann zwischen dem Pixel 2 (2017) und dem Pixel 3a (2019) eingeführt worden zu sein.
    • Vermutlich galt das auch für das Pixel 3 und für alle CTS-konformen Geräte, die Android 11 unterstützen.
    • OEMs müssen dafür lediglich einen einfachen Wert im USB HAL setzen, um die CTS-Tests zu bestehen.
  • Windows-Precision-Touchpad-Treiber

    • Erwähnung der von Bingxing Wang entwickelten Windows-Precision-Touchpad-Implementierung für Apple MacBook/Magic Trackpad 2.
  • Entwicklung der ADB-Treiber

    • Früher musste Windows für jedes neue Gerät eine .inf-Treiberdatei installieren, doch seit Windows 8 teilt das Gerät über Microsoft OS Descriptors mit, welcher Treiber benötigt wird.
    • Dadurch wurde die Nutzererfahrung verbessert, und das ist nicht nur für Entwickler wichtig, sondern auch für Nutzer, die einfach ein besseres Android-Erlebnis möchten.
  • Probleme mit USB-Treibern unter Windows

    • Unter Windows sind USB-Treiber verwirrend und können mitunter riskant sein.
    • Es wurde beobachtet, dass einige Studenten Arduino-Klone unter Windows nicht nutzen konnten, obwohl sie unter Linux problemlos funktionierten.
    • Da Windows mitunter automatisch Treiber installiert, die Geräte als „gefälscht“ einstufen und unbrauchbar machen, gilt es als letztes Mittel, etwas anderes als ein Speichergerät an ein Windows-Gerät anzuschließen.
  • Kritik an zusätzlichen Microsoft-spezifischen USB-Deskriptoren

    • Kritik daran, dass Telefonhersteller Microsoft-spezifische USB-Deskriptoren hinzufügen müssen.
    • Es sei unvernünftig, dass Windows Microsoft-spezifische Funktionen verlangt, statt sie wie Linux oder macOS durch eine standardisierte Userspace-Schnittstelle zu ersetzen.
  • Erfahrungen bei der ADB-Fehlersuche

    • Kürzlich trat bei einem Magic-Mirror-Projekt mit einem Lenovo M7 ein ADB-Problem auf.
    • Alle relevanten Stack-Overflow-Beiträge wurden gesucht und ausprobiert, jedoch ohne Erfolg, weshalb die Aussage, das Problem sei gelöst, Verwunderung auslöst.
  • Erfahrungen mit dem HID-Protokoll

    • Bei per USB angeschlossenen Geräten wurde das rohe HID-Protokoll verwendet, und es funktionierte unter allen Windows-Versionen gut.
    • Es passt nicht zu allen Anforderungen, eignet sich aber in bestimmten Fällen gut.