Sửa lỗi ADB "device busy", "unauthorized" và "no devices"
Sửa lỗi ADB device busy, unauthorized, offline, no devices bằng bảng triệu chứng - cách xử lý: cáp, driver, udev rules và quyền WebUSB.
Phần lớn lỗi kết nối ADB đến từ một số ít nguyên nhân: có chương trình khác đang giữ cổng USB, điện thoại chưa cho phép máy tính của bạn, hoặc cáp và chế độ USB chưa đúng. Hãy tìm triệu chứng khớp với lỗi của bạn bên dưới; mỗi cách sửa chỉ mất một hai phút. Trước tiên, chạy adb devices và xem trạng thái bên cạnh số serial.
Bảng xử lý nhanh
| Triệu chứng | Nguyên nhân có thể | Cách sửa |
|---|---|---|
| Device busy hoặc lỗi "claim interface" | Chương trình khác đang giữ kết nối USB | Đóng Android Studio, scrcpy và các tab khác; chạy adb kill-server |
unauthorized | Điện thoại chưa chấp nhận máy tính này | Mở khóa máy, chấp nhận hộp thoại, chọn "Always allow" |
offline | Kết nối cũ hoặc bị treo | Cắm lại, tắt/bật USB debugging, adb kill-server |
| Danh sách trống | Cáp chỉ sạc hoặc sai chế độ USB | Dùng cáp dữ liệu, đặt chế độ USB là File transfer |
| Danh sách trống trên Windows | Thiếu driver | Cài driver USB của hãng sản xuất |
| Danh sách trống trên Linux | Thiếu udev rules | Thêm udev rule cho vendor, nạp lại rules |
| Cửa sổ USB của trình duyệt không có thiết bị | Quyền WebUSB hoặc thiết bị đang bận | Đóng chương trình khác, kết nối lại, chọn lại thiết bị |
"Device busy": có thứ khác đang chiếm cổng USB
Tại một thời điểm chỉ một chương trình giữ được kết nối USB tới điện thoại. Nếu chương trình thứ hai cố kết nối, nó sẽ báo lỗi busy hoặc claim interface. Thủ phạm thường gặp:
- Android Studio hoặc IDE khác đang chạy adb server.
- scrcpy hoặc công cụ phản chiếu màn hình khác.
- Một tab trình duyệt khác đã kết nối tới cùng điện thoại.
- Một adb server chạy nền đã chiếm thiết bị trước.
Hãy đóng các công cụ và tab khác, sau đó dừng server nền:
adb kill-serverNếu bạn dùng công cụ chạy trong trình duyệt như không gian làm việc ADBKit, trình duyệt cần quyền truy cập độc quyền, nên hãy để adb server tắt trong lúc đang kết nối. Bạn có thể bật lại sau bằng adb start-server; lệnh adb kế tiếp cũng sẽ tự bật lại.
"Unauthorized": điện thoại chưa chấp nhận máy tính
adb devices hiện unauthorized khi điện thoại chưa chấp nhận khóa RSA của máy tính này. Thử lần lượt:
- Mở khóa điện thoại và tìm hộp thoại "Allow USB debugging?". Chọn Always allow from this computer rồi nhấn Allow.
- Nếu không thấy hộp thoại, rút và cắm lại cáp khi màn hình đang mở khóa.
- Trên điện thoại, vào Settings > System > Developer options (đường dẫn khác nhau tùy hãng) và nhấn Revoke USB debugging authorizations. Sau đó kết nối lại và chấp nhận lời nhắc mới.
- Tắt rồi bật lại USB debugging.
- Chạy
adb kill-server, rồiadb deviceslần nữa.
Nếu bạn chưa bật tùy chọn này, xem cách bật USB debugging.
Note: Hộp thoại có thể bị che sau màn hình khóa hoặc thanh thông báo. Hãy đánh thức và mở khóa điện thoại trước khi kết luận là nó không xuất hiện.
"Offline": đã kết nối nhưng không phản hồi
Thiết bị offline hiện trong danh sách nhưng không giao tiếp được, thường do kết nối cũ. Rút cáp, tắt rồi bật USB debugging, cắm lại và chạy adb kill-server. Hãy dùng platform-tools bản mới, vì adb quá cũ có thể hoạt động sai với các bản Android mới.
"No devices": danh sách trống
Khi danh sách trống, hãy kiểm tra phần vật lý trước:
- Cáp: nhiều cáp chỉ để sạc. Thử một cáp dữ liệu chắc chắn dùng được và cắm thẳng vào máy tính, không qua hub.
- Chế độ USB: kéo thanh thông báo xuống, nhấn thông báo USB và chọn File transfer (MTP). Một số điện thoại không bật ADB ở chế độ chỉ sạc.
- Windows: thiết bị có thể cần driver USB của hãng, hoặc hiện trong Device Manager kèm biểu tượng cảnh báo.
- Linux: người dùng thường thường không mở được thiết bị nếu thiếu udev rule cho vendor ID của điện thoại. Thêm rule, nạp lại bằng
sudo udevadm control --reload-rulesrồi cắm lại. - Developer options: xác nhận USB debugging vẫn đang bật; một số máy tự tắt sau khi khởi động lại hoặc cập nhật.
WebUSB và quyền của trình duyệt
ADB trong trình duyệt dùng WebUSB, hoạt động trên các trình duyệt máy tính nền Chromium như Chrome và Edge qua HTTPS. Firefox và Safari không hỗ trợ WebUSB. Khi bạn nhấn Connect device, trình duyệt hiện cửa sổ USB riêng; nếu điện thoại không có trong đó, gần như chắc chắn có chương trình khác đang giữ nó, hoặc cáp và chế độ USB có vấn đề. Nếu bạn đã đóng cửa sổ hoặc từ chối quyền, hãy tải lại trang và nhấn Connect device lần nữa.
ADBKit có thể tự kết nối lại các thiết bị đã được cho phép trước đó, và khi nhớ nhiều thiết bị bạn có thể chuyển đổi từ menu thiết bị. Để hiểu cơ chế, đọc WebADB và WebUSB là gì. Nếu kết nối có dây vẫn chập chờn, ADB qua Wi-Fi là một lựa chọn khác.
Màn hình hiển thị nhưng không điều khiển được
Nếu màn hình được phản chiếu nhưng chạm hoặc nhấn phím không có tác dụng, đó là vấn đề khác với kết nối. Một số điện thoại cần thêm một thiết lập nhà phát triển để chấp nhận thao tác nhập từ xa, và dự án scrcpy ghi lại các trường hợp này trong FAQ: <https://github.com/Genymobile/scrcpy/blob/master/FAQ.md>. Hướng dẫn ở đó cũng áp dụng cho các công cụ khác xây dựng trên scrcpy.