Jak skonfigurować dostęp ADB dla urządzeń z Androidem?

39

Używam Ubuntu 12.10 i zainstalowałem Android SDK, ustaw ścieżkę dla mojego użytkownika .bashrci działa.

Problem polega na tym, że mój telefon wymaga uruchamiania adb przez rootowanie w celu uzyskania uprawnień, ale uruchamiając adb z sudo, pojawia się następujący błąd:

sudo: adb: nie znaleziono polecenia

Próbowałem po prostu użyć sudo -E adb start-server, ale to nie działa. Próbowałem dodać linię ścieżki eksportu do /root/.bashrci (po uświadomieniu sobie, że to nie pomogło) do /etc/bash.bashrc.

Pamiętam, że mogłem ustawić go na moim Arch Linux, ale wydaje mi się, że mój problem jest teraz połączony z kontem root Ubuntu, nie zachowując się tak, jak tego oczekuję.


To, czego nie rozumiem, to:

Te nie działają:

martin@alyx:~$ sudo adb devices
sudo: adb: command not found

Robi to (wpisując pełną ścieżkę):

martin@alyx:~$ sudo /opt/android-sdk-linux/platform-tools/adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
CM7-Blade   device

To nie działa (użycie -E z sudo):

martin@alyx:~$ sudo -E adb devices
sudo: adb: command not found

Działa to (jako root):

martin@alyx:~$ sudo su
root@alyx:/home/martin# adb devices
List of devices attached 
CM7-Blade   device

Jestem teraz całkowicie zdezorientowany i doceniam wyjaśnienie, w jaki sposób ustawić ścieżkę do sudo lub jak inaczej rozwiązać mój problem.

(I proszę, nie mów, że adb nie powinien być uruchamiany jako root).

Z góry dziękuję!

Edycja: Wymagając uprawnień roota mam na myśli, że ich potrzebuję, ponieważ w przeciwnym razie otrzymuję:

$ adb devices 
List of devices attached 
????????????    no permissions

co nie występuje jako superużytkownik. Przepraszam, jeśli to było nieporozumienie.

Martin Fejes
źródło
Zauważyłem, zarówno w systemie Windows, jak i Ubuntu, że urządzenia z Androidem często się nie pojawiają, jeśli masz je podłączone do portu USB 3, podłączenie ich do portu innego niż USB3 łagodzi problem.
Paul Gregoire,
z dokumentów: source.android.com/source/…
Paschalis

Odpowiedzi:

48

Przeczytaj najpierw: Jak skonfigurować Android ADB?


Konfigurowanie dostępu USB

Po pierwsze, nie potrzebujesz uprawnień administratora, aby uruchomić ADB, jeśli odpowiednio ustawiłeś uprawnienia. Witryna AOSP zawiera przykłady konfiguracji dostępu USB dla urządzeń Pixel / Nexus. Możesz użyć następującego schematu dla urządzeń innych niż Nexus:

SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="xxxx", MODE="0600", OWNER="<username>"

Identyfikator dostawcy i produktu można uzyskać, korzystając lsusbz urządzenia i wyszukując je. (Uwaga: urządzenie to w rzeczywistości Galaxy Nexus.)

$ lsusb | grep -i samsung
Bus 002 Device 103: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II]

Więc moja /etc/udev/rules.d/51-android.ruleszasada udev wygląda następująco:

# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="username"

W razie potrzeby możesz to powtórzyć dla innych stanów telefonu, takich jak fastboot. Aby zmiany odniosły skutek, należy ponownie załadować udev ( sudo udevadm control --reload) lub uruchomić ponownie (zalecane).

Udostępnianie programów

Zamiast modyfikować zmienną ścieżkową sugerowałbym dodanie dowiązania symbolicznego do pliku wykonywalnego albo w ~/bin/(tylko użytkownik), albo w /usr/local/bin/(cały system).

mkdir ~/bin/
ln -s /opt/android-sdk-linux/platform-tools/adb ~/bin/
LiveWireBT
źródło
1
Próbowałem dodać reguły udev do mojego telefonu, ale to nie pomogło, więc pomyślałem, że może nie byłem pewien swojego problemu. Proszę, jeśli masz czas, zobacz koniec mojego pytania.
Martin Fejes,
Czy dodałeś poprawne identyfikatory? modaco.com/topic/329317-guide-ubuntu-and-the-blade Czy uruchomiłeś ponownie komputer? adb devicesdziała dla mnie bez uprawnień roota.
LiveWireBT
4
Tak, to działa! Dodałem reguły udev do /etc/udev/rules.d/51-android-rules i najwyraźniej to był błąd. Po użyciu /lib/udev/rules.d/11-android.rules wszystko było w porządku! Nie potrzebuję persymulacji roota! Wielkie dzięki!
Martin Fejes,
Miałem to samo ????????????? brak sytuacji z pozwoleniami, a twoja odpowiedź rozwiązała to, dzięki.
Panthro
z jakiegoś powodu to tutaj nie działało, musiałem uruchomić serwer adb z sudo; jakiś pomysł, gdzie mogę sprawdzić, dlaczego to nie działa?
Wodnik Moc
29

Natknąłem się na ten sam problem z tabletem z Chin (jakiś dziwny producent).

Oprócz /etc/udev/rules.d/51-android.rulespliku musiałem również zmienić ~/.android/adb_usb.ini.

Uruchom poniżej na terminalu;

sudo gedit ~/.android/adb_usb.ini

a twój adb_usb.iniplik powinien wyglądać następująco:

# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
# ie 0x2207
0x<!!!Your Vendor ID here!!!>

Odłączone i ponownie podłączone urządzenie, a także potrzebne do uruchomienia poniżej poleceń na terminalu;

adb kill-server

a potem

adb start-server

I urządzenie zostało wykryte.

Uygar Y
źródło
Próbowałem też z twoją wskazówką, ale nic się nie zmieniło, jakiś pomysł, gdzie mogę sprawdzić, dlaczego tutaj nie działa?
Wodnik Moc
Niezłe. To działało dla mnie. Oprócz tego musiałem zaktualizować mój adb .
Waffle's Crazy Peanut
To rozwiązanie nie działa w systemie Ubuntu 14.04. Lista urządzeń wciąż jest pusta.
Luís de Sousa
1
Wielkie dzięki, Uygar, w końcu znalazłem rozwiązanie, które działa dla mnie.
Dmitrij Popow
Tego mi brakowało. W 0x2207twoim przykładzie jest to ten sam identyfikator dostawcy, którego używa moje urządzenie.
ssokolow
2

W moim przypadku zamiast trybu MTP niektóre smartfony musiały być po prostu ustawione w trybie PTP, w przeciwieństwie do większości urządzeń, które wymagały wykrycia trybu MTP w moim Android Studio (wersja 1.5.1).

Więc najpierw wypróbuj tryby MTP i PTP bez potrzeby poświęcania czasu na bardziej złożoną konfigurację ADP Uniksa i być może wyrządzając im szkodę.

W nowszych urządzeniach możesz wybrać go bezpośrednio w opcjach programistycznych, podczas gdy w starszych znajduje się w opcjach połączonych USB na pasku stanu.

Jednak także dla mnie najnowsze urządzenia Sony Xperia od Z5 i wyższych nie będą działać bez względu na tryb USB. Być może moje Android Studio jest stare lub muszę kopać również w Uniksowych konfiguracjach ADP.

George Goodporter
źródło
1

Wykonaj następujące kroki:

  1. Ustaw zmienne Androida

    Początkowo przejdź do domu i naciśnij Ctrl+ Hpokaże ci ukryte pliki, poszukaj .bashrcpliku, otwórz go w dowolnym edytorze tekstu, a następnie umieść poniższe linie na końcu pliku:

    export ANDROID_HOME=/myPathSdk/android-sdk-linux
    export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
    
  2. Restart

  3. Za pomocą urządzenia do debugowania

    Nasłuchuj połączenia:

    adb -a
    

    Podłącz swoje urządzenie z Androidem i autoryzuj je:

    cordova run android --device
    
Vladimir Tamayo
źródło
0

Konfigurowanie dostępu USB

Zalecanym podejściem jest utworzenie pliku w /etc/udev/rules.d/51-android.rules.

Proszę wpisać Terminal:

wget -S -O - http://source.android.com/source/51-android.txt | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules

Te nowe reguły obowiązują przy następnym podłączeniu urządzenia. Może być zatem konieczne odłączenie urządzenia i ponowne podłączenie go do komputera.

Benny
źródło
0

Mimo że zaakceptowana odpowiedź pomogła mi załatwić sprawę, nadal byłem zdezorientowany:

martin@alyx:~$ sudo adb devices
sudo: adb: command not found

a szczególnie

martin@alyx:~$ sudo -E adb devices
sudo: adb: command not found

ponieważ zgodnie z sudo --help:

-E, --preserve-env          preserve user environment when running command

Okazuje się, że w wielu dystrybucjach linuksowych (w tym Debian i Ubuntu) secure_pathi env_resetopcje są domyślnie włączone, co resetuje PATHzmienną i ustawia ją na secure_path. Możesz to zmienić w /etc/sudoerspliku za pomocą visudo.

Alternatywnie możesz uruchomić:

sudo env PATH=$PATH adb devices
maxnorbi
źródło
-1

Wypróbuj to polecenie: sudo tools/android update sdk --no-ui

CZYTNIK SDK:

Witamy w pakiecie Android SDK! Archiwum zestawu SDK systemu Android początkowo zawiera tylko podstawowe narzędzia zestawu SDK. Nie zawiera platformy Android ani bibliotek stron trzecich. W rzeczywistości nie ma nawet wszystkich narzędzi potrzebnych do opracowania aplikacji. Aby rozpocząć tworzenie aplikacji, musisz zainstalować narzędzia platformy i co najmniej jedną wersję platformy Android, używając Menedżera SDK. Platform-tools zawiera narzędzia do budowania, które są okresowo aktualizowane w celu obsługi nowych funkcji na platformie Android (dlatego są one oddzielone od podstawowych narzędzi SDK), w tym adb, dexdump i innych. Aby zainstalować narzędzia platformy, platformy Android i inne dodatki, musisz mieć połączenie z Internetem, więc jeśli planujesz używać zestawu SDK w trybie offline, pobierz niezbędne komponenty w trybie online. Aby uruchomić Menedżera SDK, uruchom program „Android”. Z wiersza polecenia można również bezpośrednio uruchomić aktualizację, wykonując:tools/android update sdk --no-ui

użytkownik121040
źródło
Nie jestem pewien, czy dotyczy to pierwotnego pytania ...
landroni