6 pontos por GN⁺ 2024-01-02 | 1 comentários | Compartilhar no WhatsApp

Por que os desenvolvedores Android não precisam mais de drivers USB no Windows

  • Nas primeiras versões da plataforma Android, os desenvolvedores podiam conectar dispositivos por cabo USB no Linux ou no Mac OS X, mas os usuários de Windows precisavam procurar e instalar drivers.
  • Hoje, os drivers não são mais necessários.

USB drivers/OS 101

  • Quando um dispositivo USB é conectado a uma porta, o sistema operacional examina a hierarquia de descritores USB para carregar o driver da interface.
  • A maioria dos dispositivos USB já funciona automaticamente com drivers de "Device Class" incluídos no sistema operacional.
  • O Windows carrega um driver instalado pelo usuário quando não encontra um driver interno de "Device Class" ou quando existe um driver melhor disponível.

Por que isso não funcionava

  • Se não encontrava um driver, o Linux carregava o usbfs e o Mac OS carregava o IOKit para permitir que programas em espaço de usuário acessassem o dispositivo.
  • O Windows reportava erro e não carregava um driver, então não era possível acessar o dispositivo Android.

Por que funcionava com o driver Android

  • Para entender o que acontece quando o driver é instalado, o autor examinou o android_winusb.inf, o "cérebro" do driver USB do Google.
  • O WinUSB é um driver USB semelhante ao usbfs do Linux e ao IOKit do Mac OS, permitindo que programas em espaço de usuário enumerem interfaces e leiam e escrevam em endpoints.

Por que os dispositivos Android não precisam mais de driver do Windows

  • O método anterior tinha uma falha evidente: se o VID/PID do dispositivo Android não estivesse na lista, o winusb não era carregado.
  • O Windows 8 passou a solicitar diretamente ao dispositivo o driver necessário para a interface, de uma forma melhor do que usando um arquivo INF.
  • Se o dispositivo for compatível com Microsoft OS Descriptors (MOD), o Windows solicita o Extended Compatibility ID OS Feature Descriptor.
  • Isso permite que o winusb.sys seja carregado, e que o executável em espaço de usuário adb abra o dispositivo, reivindique a interface e permita que o desenvolvedor comece a trabalhar.

Quais dispositivos suportam Microsoft OS Descriptors

  • Pelos dispositivos Pixel do próprio autor, o suporte a MOD parece ter começado em algum momento entre o Pixel 2 (2017) e o Pixel 3a (2019).

Extended Properties OS Feature Descriptor

  • Dispositivos mais recentes, como o Pixel 8, têm Extended Properties OS Feature Descriptor, que pode incluir GUID, página de ajuda, URL e até ícone.

Opinião do GN⁺

  • O ponto mais importante deste texto é que dispositivos Android agora podem ser usados para desenvolvimento no Windows sem instalação separada de driver.
  • A introdução de Microsoft OS Descriptors e do Extended Compatibility ID OS Feature Descriptor melhorou bastante a experiência do usuário.
  • Essa mudança traz mais conveniência para desenvolvedores Android e contribui para aumentar a acessibilidade do ambiente de desenvolvimento.

1 comentários

 
GN⁺ 2024-01-02
Comentários do Hacker News
  • Amor pelo ADB (Android Debug Bridge)

    • O ADB é uma ferramenta muito útil e até permite redirecionamento de portas via VPN.
    • Mesmo para quem não é desenvolvedor Android, ele é como um canivete suíço e um dos grandes motivos para preferir Android.
    • Com o perfil de trabalho, é possível separar materiais de trabalho e elementos invasivos à privacidade das informações pessoais, eliminando a necessidade de um segundo telefone.
  • Quando o suporte a MOD (Modern Operating Devices) começou nos dispositivos Pixel

    • Pela coleção pessoal de Pixels, parece que o suporte a MOD começou entre o Pixel 2 (2017) e o Pixel 3a (2019).
    • Também deve ter sido aplicado ao Pixel 3 e vale para todos os dispositivos compatíveis com CTS (Compatibility Test Suite) que suportam Android 11.
    • O OEM precisa passar no teste CTS definindo um valor simples no USB HAL.
  • Driver Windows Precision Touchpad

    • Menção à implementação de Windows Precision Touchpad para Apple MacBook/Magic Trackpad 2 desenvolvida por Bingxing Wang.
  • Evolução dos drivers ADB

    • No passado, o Windows precisava instalar um arquivo de driver .inf para cada novo dispositivo, mas a partir do Windows 8 os dispositivos passaram a informar os drivers necessários por meio de Microsoft OS Descriptors.
    • Isso melhorou a experiência do usuário e é importante não só para desenvolvedores, mas também para quem quer uma experiência melhor com Android.
  • Problemas de drivers USB no Windows

    • No Windows, drivers USB são confusos e às vezes podem ser perigosos.
    • Houve relatos de estudantes que não conseguiam usar clones de Arduino no Windows, embora funcionassem bem no Linux.
    • Como há problemas com instalação automática de drivers que desativam dispositivos considerados "falsos", conectar qualquer coisa que não seja armazenamento a uma máquina Windows é visto como último recurso.
  • Críticas à adição de descritores USB exclusivos da Microsoft

    • Crítica ao fato de fabricantes de telefones precisarem adicionar descritores USB exclusivos da Microsoft.
    • É irracional que o Windows exija recursos proprietários da Microsoft em vez de adotar uma interface padronizada em espaço de usuário como Linux ou macOS.
  • Experiência resolvendo problemas de ADB

    • Recentemente, ao usar um Lenovo M7 em um projeto de espelho mágico, surgiu um problema com ADB.
    • Mesmo após procurar e testar todos os posts relevantes do Stack Overflow, não houve sucesso, e há estranhamento ao ouvir que esse problema foi resolvido.
  • Experiência com uso do protocolo HID

    • Foi usado o protocolo raw HID em um dispositivo conectado por USB, e funcionou bem em todas as versões do Windows.
    • Não serve para todos os requisitos, mas em alguns casos específicos se encaixa bem.