6 điểm bởi GN⁺ 2024-01-02 | 1 bình luận | Chia sẻ qua WhatsApp

Vì sao các nhà phát triển Android không còn cần driver USB trên Windows nữa

  • Trên nền tảng Android thời kỳ đầu, các nhà phát triển có thể kết nối thiết bị qua cáp USB trên Linux hoặc Mac OS X, nhưng người dùng Windows phải tự tìm và cài đặt driver.
  • Hiện nay, driver đó không còn cần thiết nữa.

USB driver/OS 101

  • Khi một thiết bị USB được cắm vào cổng, hệ điều hành sẽ kiểm tra tầng USB descriptor để xác định và nạp driver cho interface tương ứng.
  • Phần lớn thiết bị USB được hệ điều hành hỗ trợ sẵn để tự động hoạt động thông qua các driver Device Class tích hợp sẵn.
  • Windows sẽ nạp driver do người dùng cài đặt nếu không tìm thấy driver Device Class tích hợp phù hợp hoặc nếu có driver tốt hơn.

Vì sao trước đây không hoạt động

  • Nếu không tìm thấy driver, Linux sẽ nạp usbfs và Mac OS sẽ nạp IOKit để cho phép các chương trình không gian người dùng truy cập thiết bị.
  • Windows thì báo lỗi và không nạp driver, nên không thể truy cập thiết bị Android.

Vì sao driver Android từng hoạt động

  • Để hiểu điều gì xảy ra khi driver được cài đặt, bài viết xem xét android_winusb.inf, “bộ não” của Google USB Driver.
  • WinUSB là một USB driver tương tự usbfs trên Linux và IOKit trên Mac OS, cho phép các chương trình không gian người dùng liệt kê interface và đọc/ghi từ các endpoint.

Vì sao thiết bị Android không còn cần driver Windows nữa

  • Cách làm trước đây có một nhược điểm rõ ràng: nếu VID/PID của thiết bị Android không có trong danh sách, winusb sẽ không được nạp.
  • Windows 8 đã đưa ra một cách tốt hơn INF file bằng việc trực tiếp hỏi thiết bị về driver cần thiết cho interface.
  • Nếu thiết bị tương thích với Microsoft OS descriptor (MOD), Windows sẽ yêu cầu extended compatible ID OS feature descriptor.
  • Nhờ đó winusb.sys được nạp, và tệp thực thi không gian người dùng adb có thể mở thiết bị, yêu cầu interface và để nhà phát triển bắt đầu làm việc.

Những thiết bị nào hỗ trợ Microsoft OS descriptor

  • Dựa trên các thiết bị Pixel do tác giả sở hữu, có vẻ như hỗ trợ MOD bắt đầu xuất hiện trong khoảng từ Pixel 2 (2017) đến Pixel 3a (2019).

Extended properties OS feature descriptor

  • Các thiết bị mới hơn như Pixel 8 có extended properties OS feature descriptor, có thể bao gồm GUID, trang trợ giúp, URL, thậm chí cả biểu tượng.

Ý kiến của GN⁺

  • Điểm quan trọng nhất của bài viết này là thiết bị Android giờ đây có thể được dùng cho phát triển trên Windows mà không cần cài driver riêng.
  • Việc đưa vào Microsoft OS descriptor và extended compatible ID OS feature descriptor đã cải thiện đáng kể trải nghiệm người dùng.
  • Thay đổi này mang lại sự tiện lợi cho các nhà phát triển Android và góp phần nâng cao khả năng tiếp cận của môi trường phát triển.

1 bình luận

 
GN⁺ 2024-01-02
Ý kiến Hacker News
  • Tình yêu dành cho ADB (Android Debug Bridge)

    • ADB là một công cụ rất hữu ích, thậm chí còn có thể định tuyến lại cổng qua VPN.
    • Ngay cả khi không phải là lập trình viên Android, nó vẫn giống như một con dao đa năng Thụy Sĩ, và là một trong những lý do lớn khiến nhiều người thích Android.
    • Có thể tách biệt tài liệu liên quan đến công việc và các yếu tố xâm phạm quyền riêng tư cá nhân thông qua hồ sơ công việc, nên không cần điện thoại thứ hai.
  • Thời điểm thiết bị Pixel bắt đầu hỗ trợ MOD (Modern Operating Devices)

    • Dựa trên bộ sưu tập Pixel cá nhân, có vẻ hỗ trợ MOD đã bắt đầu trong khoảng từ Pixel 2 (2017) đến Pixel 3a (2019).
    • Có lẽ Pixel 3 cũng đã được áp dụng, và điều này áp dụng cho mọi thiết bị tuân thủ CTS (Compatibility Test Suite) hỗ trợ Android 11.
    • OEM phải vượt qua bài kiểm tra CTS bằng cách đặt một giá trị đơn giản trong USB HAL.
  • Trình điều khiển Windows Precision Touchpad

    • Nhắc đến bản triển khai Windows Precision Touchpad cho Apple MacBook/Magic Trackpad 2 do Bingxing Wang phát triển.
  • Sự phát triển của trình điều khiển ADB

    • Trước đây, Windows phải cài tệp trình điều khiển .inf cho từng thiết bị mới, nhưng từ Windows 8 trở đi, thiết bị sẽ thông báo trình điều khiển cần thiết thông qua Microsoft OS Descriptors.
    • Nhờ đó trải nghiệm người dùng được cải thiện, và điều này quan trọng không chỉ với lập trình viên mà cả với những người muốn có trải nghiệm Android tốt hơn.
  • Vấn đề trình điều khiển USB trên Windows

    • Trên Windows, trình điều khiển USB khá rối rắm và đôi khi có thể nguy hiểm.
    • Đã từng chứng kiến một số sinh viên không thể dùng các bản sao Arduino trên Windows dù chúng hoạt động tốt trên Linux.
    • Có vấn đề là Windows tự động cài trình điều khiển làm vô hiệu hóa các thiết bị bị coi là "giả", nên việc kết nối bất cứ thứ gì ngoài thiết bị lưu trữ vào máy Windows bị xem là lựa chọn cuối cùng.
  • Chỉ trích việc thêm bộ mô tả USB dành riêng cho Microsoft

    • Có ý kiến chỉ trích việc các nhà sản xuất điện thoại phải thêm bộ mô tả USB dành riêng cho Microsoft.
    • Thật vô lý khi Windows yêu cầu tính năng độc quyền của Microsoft thay vì thay thế bằng giao diện user-space được chuẩn hóa như Linux hay macOS.
  • Trải nghiệm xử lý sự cố ADB

    • Gần đây khi thực hiện dự án gương ma thuật với Lenovo M7, đã gặp phải vấn đề với ADB.
    • Đã tìm và thử mọi bài viết liên quan trên Stack Overflow nhưng không thành công, nên tỏ ra ngạc nhiên khi nghe nói vấn đề này đã được giải quyết.
  • Trải nghiệm sử dụng giao thức HID

    • Đã sử dụng giao thức raw HID trên thiết bị kết nối USB, và nó hoạt động tốt trên mọi phiên bản Windows.
    • Dù không phù hợp với mọi yêu cầu, nhưng trong một số trường hợp cụ thể thì rất hợp.