Làm cách nào để thiết bị của tôi được ADB phát hiện trên Linux?


18

Tôi vừa nhận được Wileyfox Swift mới sáng bóng của mình - và trước khi đưa nó vào sử dụng, tôi muốn oem unlockvà root nó (như tôi thường làm với các thiết bị mới;) Rắc rối là, mặc dù đã trên thiết bị và /etc/udev/rules.d/51-android.rulestồn tại một dòng tương ứng , thiết bị không được nhìn thấy bởi adb devices.

Tôi biết có một số câu trả lời nằm rải rác xung quanh trang web này, nhưng chúng rất khó tìm, chỉ bao gồm một thiết bị cụ thể hoặc không bao gồm tất cả các bước cuối cùng tôi cần. Vì vậy, tôi coi đây là cơ hội cho một câu hỏi chính tắc, độc lập với thiết bị và đưa ra câu trả lời chi tiết dưới đây:

Làm cách nào để thiết bị Android của tôi được nhìn thấy và sử dụng adbtrên Linux?


Tôi luôn luôn sẵn sàng để chỉ trích - nhưng một downvote mà không có lời giải thích là khó diễn giải. Vì vậy, downvoter xin vui lòng giải thích những gì cần được cải thiện cho câu hỏi? Tôi hứa sẽ không lạm dụng quyền hạn mod của mình để trừng phạt :)
Izzy

3
Tôi cho rằng cử tri đã không nhận ra bạn đã đăng câu hỏi để tự trả lời nó (không được chú ý đến bạn trong câu trả lời). Vì không có gợi ý nào trong câu hỏi hoặc bình luận rằng nó được đăng với mục đích tự trả lời, cử tri có thể đã phản đối đoạn thứ hai đến đoạn cuối (thể hiện sự lười biếng, nếu đọc trong ngữ cảnh của bất kỳ người dùng thông thường nào và câu hỏi của họ). Tôi không thể nghĩ ra bất kỳ lý do nào khác.
Firelord

1
@Firelord nghe có vẻ thuyết phục (chỉnh sửa câu hỏi một chút để ngăn chặn các bước thất bại bổ sung). Nhưng sau đó, người dùng đó nên đưa ra câu trả lời. Hay tôi đã bỏ lỡ một cái gì đó ở đó là tốt? ;)
Izzy

Câu trả lời:


24

Bật gỡ lỗi USB trên thiết bị

Điều này được thực hiện trong Cài đặt Phát triển . Nếu bạn không có mục đó trong menu cài đặt, hãy đi tới Cài đặt Giới thiệu , cuộn đến "Số xây dựng" và đập nó như một con khỉ cho đến khi thiết bị của bạn chúc mừng bạn đã trở thành nhà phát triển. Quay trở lại trang chính của menu Cài đặt và gần phía dưới, bạn sẽ thấy cài đặt "Phát triển" (hoặc "Nhà phát triển") ngay bây giờ. Nhập nó và bật gỡ lỗi USB ở đây.

Xác định thiết bị

Đầu tiên chúng ta cần biết cách xác định thiết bị trên bus USB. Vì thế, với thiết bị Android KHÔNG được kết nối, hãy lấy một trình bao và chạy lệnh lsusb. Sau đó kết nối thiết bị và chạy lại lệnh. Phát hiện dòng mới. Đối với Wileyfox Swift, đây là một "thiết bị không tên":

Bus 004 Device 003: ID 2970:2282

Thiết lập các quy tắc cho ADB

Bây giờ chúng ta cần các số ở cuối dòng trên : 2970:2282. Chúng chỉ định nhà cung cấp (2970) và chính thiết bị (2282). Có những chi tiết đó, chúng tôi cần một vỏ gốc trên máy Linux của chúng tôi để chỉnh sửa (hoặc tạo, nếu nó chưa tồn tại) /etc/udev/rules.d/51-android.rulestệp. Trong đó, thêm một dòng cho thiết bị của bạn. Dòng ví dụ sau đây cho thấy nó trông như thế nào đối với Wileyfox Swift:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2970", ATTRS{idProduct}=="2282", MODE="0666" GROUP="androiddev", SYMLINK+="android%n"

Nếu bạn có một thiết bị khác, hãy thay thế ID nhà cung cấp và sản phẩm bằng những gì bạn đã tìm thấy ở trên khi chạy lsusb. Một lời giải thích ngắn của dòng:

  • SUBSYSTEMS=="usb": rõ ràng quy tắc này chỉ dành cho USB;)
  • ATTRS{idVendor}=="2970": ID nhà cung cấp của thiết bị quy tắc này dành cho
  • ATTRS{idProduct}=="2282": ID thiết bị
  • MODE="0666": cho phép nút thiết bị sẽ nhận được. 0666khá lỏng lẻo, cho phép mọi người dùng trên hệ thống của bạn đọc và viết quyền - vì vậy nếu bạn quan tâm, bạn có thể thử thay thế bằng một 0660(chỉ cho chủ sở hữu và nhóm đọc-ghi và từ chối mọi thứ cho người khác).
  • GROUP="androiddev": nhóm nút thiết bị nào sẽ thuộc về. Đây phải là một nhóm người dùng dự định làm việc với thiết bị.
  • SYMLINK+="android%n": chỉ để cung cấp cho nút một tên đẹp, vì vậy bạn có thể tìm thấy nó dễ dàng hơn /dev(trong trường hợp của tôi, sau này nó xuất hiện ở đó như /dev/android5)

Quy tắc đó được đưa vào /etc/udev/rules.d/51-android.rules, chúng ta phải nói udevđể sử dụng nó. Cách an toàn nhất (bên cạnh khởi động lại;) là khởi động lại udevdịch vụ. Tùy thuộc vào bản phân phối Linux của bạn, điều này có thể được thực hiện thông qua service udev restarthoặc /etc/init.d/udev restart.

Xong việc đó, để lại vỏ gốc. Ngắt kết nối và kết nối lại thiết bị Android của bạn, thử adb deviceslại. Hầu hết các thiết bị xuất hiện bây giờ, nhưng không phải Wileyfox Swift - mà rõ ràng muốn có thêm một số âu yếm. Nếu bạn ở trong tình huống đó, hãy mở (hoặc tạo nếu nó không tồn tại) tệp ~/.android/adb_usb.inivà thêm một dòng vào đó, đặt tên cho nhà cung cấp mà bạn đã tìm thấy lsusbở trên; đối với Swift sẽ là 0x2970(yupp, ở đây bạn cần thêm tiền tố vào đó 0xđể chỉ ra đó là số thập lục phân). Sau đó khởi động lại máy chủ ADB : adb kill-server && adb start-server. Ngắt kết nối và kết nối lại thiết bị một lần nữa. Bây giờ adb devicesnên xem nó.

Kết nối thiết bị

Bạn có thể đã nhận thấy adb devicesnói với bạn một cái gì đó như 0123456789ABCDEF unauthorized. Điều đó ổn và vì sự an toàn (thiết bị) của bạn: trước tiên máy tính của bạn phải được cấp phép để có thể truy cập thiết bị. Vì vậy, chỉ cần phát hành adb shellngay bây giờ - sẽ thoát khỏi error: device unauthorized. Please check the confirmation dialog on your device.lời khuyên đó (tùy chọn đánh dấu vào hộp kiểm để ủy quyền vĩnh viễn cho máy tính của bạn) và bạn đã hoàn tất: Bây giờ bạn có thể sử dụng để truy cập thiết bị của mình.


Cập nhật:

Lưu ý rằng trong các phiên bản Linux sau này, cú pháp cho các quy tắc UDEV đã thay đổi một chút, ví dụ như jcomeau_ictx đã chỉ ra trong nhận xét của mình. Đối với các giá trị chúng tôi tìm thấy ở trên sẽ là:

SUBSYSTEM=="usb", ATTR{idVendor}=="2970", ATTR{idProduct}=="2282", MODE="0666", GROUP="plugdev", SYMLINK+="android%n"

Hai sự khác biệt: nó bây giờ SUBSYSTEM(không nhiều), và nhóm đã thay đổi từ androiddevđến plugdev(cựu không tồn tại trên hệ thống gần đây, sau này không và thường được gán ít nhất cho người sử dụng đầu tiên).

Ngoài ra, bạn có thể cần thêm ID nhà cung cấp vào ~/.android/adb_usb.ini(một ID trên mỗi dòng, theo ký hiệu hex):

# ANDROID 3RD PARTY USB VENDOR ID LIST
# 1 USB VENDOR ID PER LINE.
0x2970

1
định dạng cho quy tắc udev là khác nhau trên hệ thống Jessie của tôi: jcomeau@aspire:~$ tail -n 1 /etc/udev/rules.d/99-android.rules SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", MODE="0666", GROUP="plugdev", SYMLINK+="android%n" jcomeau@aspire:~$ cat ~/.android/adb_usb.ini # ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT. # USE 'android update adb' TO GENERATE. # 1 USB VENDOR ID PER LINE. 0x0e8d Tôi đã phải bỏ qua lời khuyên để chạy android update adbvà nhập thủ công như bạn đã nêu.
jcomeau_ictx

@jcomeau_ictx cảm ơn bạn đã phản hồi! Theo như tôi có thể thấy từ nhận xét của bạn, đó chỉ là sử dụng một nhóm người dùng khác ( plugdevthay vì androiddev). Chưa được xác minh, nhưng tôi muốn nói rằng phần quan trọng ở đây là nhóm người dùng của bạn (mà bạn muốn sử dụng USB) cũng có.
Izzy

1
cũng SUBSYSTEMthay vì SUBSYSTEMS, ATTRthay vì ATTRSdấu phẩy sau khi MODE="0666" không chắc chắn liệu tất cả những thay đổi đó có cần thiết hay không, nhưng đó là những gì đã hoạt động.
jcomeau_ictx

Ồ - cảm ơn, đã bỏ lỡ những cái nhỏ đó, @jcomeau_ictx - điểm tốt!
Izzy

Đối với những người không hiểu biết về Linux sudo wget -O /etc/udev/rules.d/51-android.rulestừ đây đã làm việc cho tôi cho chiếc Xiaomi Mi A1 của tôi. Tất nhiên là tốt hơn để học nhưng tốt để lười biếng :)
beeshyams

0

Một vài bình luận từ một bản phân phối Linux mới hơn. Fedora 29 với điện thoại Nexus 5X hoặc Nokia 7.1 (Android One).

Đầu tiên ngắt kết nối điện thoại, nếu đã kết nối.

  1. Cài đặt công cụ android sẽ cung cấp ADB ( sudo dnf install android-tools)
  2. Sao chép quy tắc udev ( sudo cp /usr/share/doc/android-tools/51-android.rules /etc/udev/rules.d)
  3. Tải lại quy tắc udev ( sudo udevadm control --reload-rules)
  4. Khởi động lại ADB để chắc chắn ( sudo systemctl restart adb)

Bây giờ kết nối điện thoại và chạy adb devicestừ dòng lệnh. Bạn có thể sẽ thấy một thiết bị được liệt kê với "không có quyền". Điều này là tốt
NẾU nó không được liệt kê, bạn sẽ phải thêm thiết bị của mình vào tệp quy tắc udev, nhưng đối với tôi, các thiết bị được thử nghiệm chỉ hoạt động với các quy tắc được xác định trước.

Chạy adb shellvà hy vọng bạn sẽ nhận được thông báo bảo mật trên điện thoại hỏi bạn có muốn tin tưởng vào máy tính không, chọn có.
NẾU thay vì máy tính của bạn báo "lỗi: không đủ quyền cho thiết bị", bạn cần đảm bảo rằng trên điện thoại bạn đã đặt cổng USB ở chế độ "Truyền tệp" và không "Sạc thiết bị này". Trên Android 8.1, phần này nằm trong cài đặt trong "Thiết bị được kết nối"> "USB".

Tôi đã nhận thấy rằng ngay cả khi bạn có mọi thứ làm việc hôm nay, ngày mai nó có thể đột ngột bị phá vỡ mà không có lý do rõ ràng. Nếu điều đó xảy ra, trước tiên hãy kiểm tra cài đặt cổng USB trên thiết bị, có thể đã chuyển về chế độ sạc và nếu thất bại, hãy thu hồi ủy quyền gỡ lỗi USB trên thiết bị (trong cài đặt trong tùy chọn Nhà phát triển) và bạn hy vọng sẽ nhận được pop -up lại khi bạn chạy adb shell.

Với điều này, tôi có thể chạy Android Studio và chạy trên thiết bị được kết nối.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.