Jak mogę wykryć moje urządzenie przez ADB w systemie Linux?

18

Właśnie dostałem nowy, błyszczący Wileyfox Swift - i przed oddaniem go do użytku chcę oem unlocki korzeń to (jak zwykle zrobić z nowymi urządzeniami;) Problem w tym, choć jest włączone w urządzeniu, a odpowiednia linia /etc/udev/rules.d/51-android.rulesistnieje , urządzenie nie jest widoczne dla adb devices.

Wiem, że istnieje kilka odpowiedzi rozrzuconych po tej stronie, ale są one trudne do znalezienia, obejmują tylko konkretne urządzenie lub nie obejmują wszystkich kroków, których w końcu potrzebowałem. Biorę to za szansę na kanoniczne, niezależne od urządzenia pytanie i podam szczegółową odpowiedź poniżej:

Jak mogę zobaczyć i używać mojego urządzenia z Androidem adbw systemie Linux?

Izzy
źródło
Zawsze jestem otwarty na krytykę - ale głosowanie bez wyjaśnienia jest trudne do interpretacji. Czy więc downvoter powinien wyjaśnić, co należy poprawić w tym pytaniu? Obiecuję, że nie będę nadużywał moich modowych uprawnień za karę :)
Izzy
3
Podejrzewam, że wyborca ​​nie zdał sobie sprawy, że wysłałeś pytanie, aby samemu na nie odpowiedzieć (nie mogłem cię zauważyć w odpowiedzi). Ponieważ w pytaniu lub komentarzach nie ma podpowiedzi, że został zamieszczony w celu udzielenia odpowiedzi, głosujący mógł sprzeciwić się akapitowi od drugiego do ostatniego (pokazuje lenistwo, jeśli jest czytane w kontekście każdego zwykłego użytkownika i jego pytania). Na razie nie mogę wymyślić żadnego innego powodu.
Firelord
1
@Firelord brzmi przekonująco (zredagował to pytanie, aby zapobiec dodatkowym krokom awaryjnym). Ale wtedy ten użytkownik powinien był głosować na odpowiedź. Czy też coś tam przeoczyłem? ;)
Izzy

Odpowiedzi:

24

Włącz debugowanie USB na urządzeniu

Odbywa się to w Ustawieniach ›Rozwój . Jeśli nie masz tego wpisu w menu ustawień, przejdź do Ustawienia ›Informacje , przewiń do„ Numer kompilacji ”i młotkuj go jak małpa, aż urządzenie pogratuluje Ci zostania programistą. Wróć do strony głównej menu Ustawienia i blisko dołu powinieneś teraz zobaczyć ustawienia „Programowanie” (lub „Programiści”). Wpisz go i włącz tutaj debugowanie USB .

Zidentyfikuj urządzenie

Najpierw musimy wiedzieć, jak urządzenie identyfikuje się na magistrali USB. W tym celu, gdy urządzenie Android NIE jest podłączone, chwyć powłokę i uruchom polecenie lsusb. Następnie podłącz urządzenie i ponownie uruchom komendę. Znajdź nową linię. W przypadku Wileyfox Swift jest to „urządzenie bezimienne”:

Bus 004 Device 003: ID 2970:2282

Konfigurowanie reguł dla ADB

Musimy teraz numery na końcu powyższej linii: 2970:2282. Określają one dostawcę (2970) i ​​samo urządzenie (2282). Mając te szczegóły, potrzebujemy powłoki root na naszym komputerze z systemem Linux, aby edytować (lub tworzyć, jeśli jeszcze nie istnieje) /etc/udev/rules.d/51-android.rulesplik. Tam dodaj linię do swojego urządzenia. Poniższy przykładowy wiersz pokazuje, jak wygląda Wileyfox Swift: ¹

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

Jeśli masz inne urządzenie, zastąp identyfikatory dostawcy i produktu tymi, które znalazłeś powyżej podczas uruchamiania lsusb. Krótkie wyjaśnienie linii:

  • SUBSYSTEMS=="usb": oczywiście ta reguła dotyczy tylko USB;)
  • ATTRS{idVendor}=="2970": identyfikator dostawcy urządzenia, którego dotyczy ta reguła
  • ATTRS{idProduct}=="2282": identyfikator urządzenia
  • MODE="0666": uprawnienia, które powinien otrzymać węzeł urządzenia. 0666jest dość luźny, dając każdemu użytkownikowi w twoim systemie uprawnienia do odczytu i zapisu - więc jeśli się martwisz, możesz spróbować zastąpić to 0660(dając tylko właścicielowi i grupie do odczytu i zapisu i odmawiając wszystkim innym).
  • GROUP="androiddev": do której grupy powinien należeć węzeł urządzenia. Powinna to być grupa, do której należą użytkownicy zamierzający pracować z urządzeniem.
  • SYMLINK+="android%n": tylko po to, aby nadać węzłu ładną nazwę, abyś mógł łatwiej go znaleźć /dev(w moim przypadku później pojawił się tam jako /dev/android5)

Zasada została wprowadzona /etc/udev/rules.d/51-android.rules, musimy powiedzieć, udevaby z niej skorzystać. Najbezpieczniejszym sposobem (po ponownym uruchomieniu;) jest ponowne uruchomienie udevusługi. W zależności od dystrybucji Linuksa można to zrobić za pomocą service udev restartlub /etc/init.d/udev restart.

Wykonaj to, pozostaw skorupę roota. Odłącz i ponownie podłącz urządzenie z Androidem, spróbuj adb devicesponownie. Pojawiło się teraz większość urządzeń, ale nie Wileyfox Swift - który oczywiście potrzebuje dodatkowych przytulanek. Jeśli znajdujesz się w takiej sytuacji, otwórz (lub utwórz, jeśli nie istnieje) plik ~/.android/adb_usb.inii dodaj do niego pojedynczy wiersz, podając nazwę dostawcy, o którym wiesz lsusbpowyżej; dla Swift , która byłaby 0x2970(yupp, tutaj trzeba poprzedzić go 0xpodkreślić, że jest to liczba szesnastkowa). Następnie należy zrestartować serwer ADB: adb kill-server && adb start-server. Odłącz i ponownie podłącz urządzenie. Teraz adb devicespowinien to zobaczyć.

Podłączanie urządzenia

Być może zauważyłeś adb devicescoś podobnego 0123456789ABCDEF unauthorized. To jest OK i dla twojego (urządzeń) bezpieczeństwa: twój komputer musi być najpierw autoryzowany, aby mieć dostęp do urządzenia. Więc po prostu wydaj adb shellteraz - który zostanie zakończony poleceniem error: device unauthorized. Please check the confirmation dialog on your device.Postępuj zgodnie z tą radą (opcjonalnie zaznacz pole wyboru, aby trwale autoryzować komputer) i gotowe: Teraz możesz użyć aby uzyskać dostęp do urządzenia.


Aktualizacje:

¹ Zauważ, że w późniejszych wersjach systemu Linux składnia reguł UDEV uległa nieznacznej zmianie, jak np. Jcomeau_ictx w swoim komentarzu. Dla wartości, które znaleźliśmy powyżej, będą to:

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

Dwie różnice: teraz SUBSYSTEM(bez liczby mnogiej), a grupa zmieniła się z androiddevna plugdev(pierwsza nie istnieje w najnowszych systemach, druga ma i zwykle jest przypisana przynajmniej pierwszemu użytkownikowi).

Ponadto może być konieczne dodanie identyfikatora vendorID do ~/.android/adb_usb.ini(jeden identyfikator w wierszu w zapisie szesnastkowym):

# ANDROID 3RD PARTY USB VENDOR ID LIST
# 1 USB VENDOR ID PER LINE.
0x2970
Izzy
źródło
1
format reguły udev był inny w moim systemie Jessie: 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 musiałem zignorować poradę, aby uruchomić android update adbi wprowadzić ją ręcznie, jak powiedziałeś.
jcomeau_ictx
@jcomeau_ictx dzięki za opinie! O ile widzę z twojego komentarza, to po prostu używa innej grupy użytkowników ( plugdevzamiast androiddev). Nie zweryfikowano, ale powiedziałbym, że ważną częścią jest to, że jest to grupa, którą ma również użytkownik (z którym chcesz korzystać z USB).
Izzy
1
również SUBSYSTEMzamiast SUBSYSTEMS, ATTRzamiast ATTRS, przecinek po MODE="0666" nie wiem, czy wszystkie te zmiany były konieczne, ale to, co działało.
jcomeau_ictx
Och - dzięki, przegapiłem te małe, @jcomeau_ictx - dobra uwaga!
Izzy
Dla ludzi Linux dla Savvy sudo wget -O /etc/udev/rules.d/51-android.rulesz tu pracował dla mnie przez mojego Xiaomi Mi A1. Oczywiście lepiej się uczyć, ale dobrze jest być leniwym :)
beeshyams,
0

Kilka komentarzy z nowszej dystrybucji Linuksa. Fedora 29 z Nexusem 5X lub telefonem Nokia 7.1 (Android One).

Najpierw odłącz telefon, jeśli jest już podłączony.

  1. Zainstaluj androidowe narzędzia, które dostarczą ADB ( sudo dnf install android-tools)
  2. Skopiuj reguły udev ( sudo cp /usr/share/doc/android-tools/51-android.rules /etc/udev/rules.d)
  3. Przeładuj reguły udev ( sudo udevadm control --reload-rules)
  4. Uruchom ponownie ADB, aby się upewnić ( sudo systemctl restart adb)

Teraz podłącz telefon i uruchom adb devicesz wiersza poleceń. Prawdopodobnie zobaczysz urządzenie z „brakiem uprawnień”. Jest okej.
JEŚLI nie ma go na liście, będziesz musiał dodać swoje urządzenie do pliku reguł udev, ale dla mnie testowane urządzenia po prostu działały z predefiniowanymi regułami.

Uruchom adb shelli miejmy nadzieję, że dostaniesz powiadomienie bezpieczeństwa na telefonie z pytaniem, czy chcesz zaufać komputerowi, wybierz tak.
JEŚLI zamiast tego komputer wyświetla komunikat „błąd: niewystarczające uprawnienia dla urządzenia”, musisz upewnić się, że w telefonie ustawiono port USB w tryb „Przesyłanie plików”, a nie „Naładuj to urządzenie”. W Androidzie 8.1 znajduje się to w ustawieniach w „Podłączonych urządzeniach”> „USB”.

Zauważyłem, że nawet jeśli wszystko działa dzisiaj, jutro może nagle pęknąć bez wyraźnego powodu. Jeśli tak się stanie, najpierw sprawdź ustawienie portu USB w urządzeniu, które mogło zmienić się z powrotem w tryb ładowania, a jeśli to się nie powiedzie, unieważnij autoryzację debugowania USB na urządzeniu (w ustawieniach w Opcjach programisty), a mam nadzieję, że otrzymasz pop -up ponownie, gdy biegniesz adb shell.

Dzięki temu mogę uruchomić Android Studio i uruchomić na podłączonym urządzeniu.

Obrabować
źródło