WebADB là gì? Cách ADB chạy trên trình duyệt với WebUSB
WebADB cho phép trình duyệt nói chuyện giao thức ADB qua WebUSB. Tìm hiểu cấu trúc ADB, cách trình duyệt kết nối, mô hình bảo mật và các giới hạn.
WebADB là ý tưởng chạy giao thức Android Debug Bridge trực tiếp bên trong trình duyệt web, không cần chương trình trung gian trên máy tính. Điều này khả thi vì các trình duyệt nền Chromium hiện đại có thể giao tiếp với thiết bị USB qua API WebUSB, còn ADB về bản chất chỉ là một giao thức chạy trên USB. Nhờ vậy một trang web có thể kết nối với điện thoại của bạn, xin phép bạn, rồi tự đóng vai trò ADB client.
Tổng quan nhanh về cách ADB hoạt động
ADB truyền thống gồm ba phần:
- Client là lệnh
adbbạn gõ trong terminal. - Server là tiến trình nền trên máy tính. Nó khởi động ở lần đầu bạn chạy lệnh, lắng nghe trên một cổng cục bộ (mặc định 5037) và quản lý kết nối tới mọi thiết bị.
- Daemon, tức
adbd, chạy ngay trên thiết bị Android và thực hiện những gì server yêu cầu: cài gói, mở shell, truyền tệp, phát log.
Khi bạn gõ adb devices, client hỏi server, và server nói chuyện với adbd qua USB hoặc TCP/IP. Server cũng đảm nhận việc trao đổi khóa RSA để điện thoại quyết định có tin máy tính của bạn hay không. Nếu cần chuẩn bị phía điện thoại trước, xem cách bật gỡ lỗi USB.
WebUSB là gì
WebUSB là API của trình duyệt cho phép trang web giao tiếp với thiết bị USB. Trang web không thể thấy mọi thiết bị đang cắm vào máy. Thay vào đó nó gọi trình duyệt, trình duyệt hiện cửa sổ chọn liệt kê các thiết bị tương thích. Bạn chọn một thiết bị, và chỉ khi đó trang mới được truy cập.
Với điện thoại Android, điểm thú vị là khi bật gỡ lỗi USB, điện thoại cung cấp một giao diện USB dành riêng cho ADB. Trang web đã được cấp quyền có thể chiếm giao diện đó và gửi, nhận dữ liệu thô qua nó.
Trình duyệt nói chuyện giao thức ADB như thế nào
Giao thức ADB trên đường truyền đã được tài liệu hóa và khá nhỏ gọn: các thông điệp gồm một lệnh, hai tham số và phần dữ liệu, bao gồm việc kết nối, mở luồng, ghi dữ liệu và đóng luồng. Thư viện WebADB hiện thực hành vi tương tự client và server của adb, nhưng bằng JavaScript hoặc TypeScript:
- Trang web yêu cầu trình duyệt mở cửa sổ chọn thiết bị USB.
- Bạn chọn điện thoại và trình duyệt cấp quyền truy cập.
- Trang chiếm giao diện ADB và gửi thông điệp kết nối.
- Điện thoại trả lời bằng một thử thách xác thực.
- Trang ký thử thách bằng khóa RSA lưu trong trình duyệt. Lần đầu tiên, điện thoại hiện hộp thoại Cho phép gỡ lỗi USB? kèm vân tay của khóa đó.
- Sau khi bạn chạm Cho phép, phiên làm việc được mở và trang có thể chạy lệnh shell, đẩy tệp, cài APK hoặc đọc log.
Nói cách khác, một tab trình duyệt thay thế cả adb client lẫn adb server. ADBKit hoạt động theo cách này: không gian làm việc chỉ là một trang web bình thường kết nối với điện thoại qua WebUSB.
Yêu cầu và hỗ trợ trình duyệt
- Trình duyệt máy tính nền Chromium, như Google Chrome hoặc Microsoft Edge.
- HTTPS. WebUSB chỉ chạy trong ngữ cảnh an toàn, nên trang phải được phục vụ qua HTTPS (hoặc từ localhost khi phát triển).
- Thao tác của người dùng. Cửa sổ chọn chỉ mở được bằng một cú bấm hoặc chạm, không bao giờ mở ngầm.
- Đã bật gỡ lỗi USB trên điện thoại và dùng cáp có truyền dữ liệu.
Firefox và Safari không hỗ trợ WebUSB, nên các công cụ WebADB không chạy được ở đó. Hỗ trợ trình duyệt trên điện thoại Android khác với máy tính và không phải cách đáng tin để điều khiển một thiết bị khác.
Mô hình bảo mật
Cho một trang web quyền truy cập điện thoại nghe có vẻ rủi ro, vì vậy nền tảng đặt nhiều lớp bảo vệ:
- Quyền theo từng thiết bị. Trang không thể liệt kê các thiết bị USB của bạn. Bạn phải chọn đúng thiết bị trong cửa sổ chọn của trình duyệt mỗi khi quyền chưa được ghi nhớ.
- Xác thực ADB. Điện thoại độc lập hỏi bạn có duyệt khóa RSA của máy tính hay không. Nếu không chạm vào điện thoại, kết nối vẫn ở trạng thái
unauthorized. - Nguồn gốc an toàn. Vì bắt buộc dùng HTTPS, trang bạn đang làm việc được xác thực và mã của nó không bị can thiệp trên đường truyền.
- Có thể thu hồi. Bạn có thể xóa quyền USB của một trang trong cài đặt trình duyệt, và xóa danh sách phía điện thoại bằng Thu hồi quyền gỡ lỗi USB trong Tùy chọn nhà phát triển.
Lưu ý: Như với mọi công cụ điều khiển thiết bị, chỉ mở các trang WebADB mà bạn tin tưởng. Với ADBKit, màn hình thiết bị, tệp, log và APK chỉ đi giữa trình duyệt và thiết bị, và không có máy chủ ADBKit nào nhận chúng.
Những giới hạn cần biết
- Mỗi lúc một chương trình. Một giao diện USB chỉ có thể bị một chương trình chiếm. Nếu Android Studio, scrcpy, tab trình duyệt khác hoặc một
adbserver đang chạy đã giữ điện thoại, trình duyệt sẽ không mở được. Hãy đóng chương trình kia hoặc chạyadb kill-server. Xem khắc phục lỗi ADB device busy hoặc unauthorized. - Trình duyệt không mở được TCP thô. Trang web không thể mở socket TCP tùy ý, nên kết nối qua Wi-Fi cần một bộ chuyển tiếp nhỏ chạy trên máy tính. ADBKit cung cấp sẵn một công cụ như vậy.
- Hỗ trợ trình duyệt. Hiện chỉ các trình duyệt máy tính nền Chromium hoạt động.
- Hiệu năng phụ thuộc cáp và cổng. Cáp hoặc hub kém sẽ gây giật lag hoặc ngắt kết nối.
Vì sao điều này quan trọng
Với nhiều tác vụ, WebADB loại bỏ khâu thiết lập: không phải tải platform tools, không phải cấu hình PATH, không phải khớp driver trên macOS hay Linux. Bạn mở một trang, chọn thiết bị và bắt đầu làm việc. Xem thực tế trong bài điều khiển điện thoại Android từ trình duyệt. Với công việc dòng lệnh truyền thống, ADB trên máy tính vẫn là lựa chọn tốt, và hai cách tiếp cận dùng cùng một giao thức với cùng một daemon trên điện thoại.