Błąd „Niewystarczające uprawnienia” w poleceniu „adb push” w dniu 12.04


57

Gdy próbowałem wcisnąć plik apk na tablet, otrzymałem ten błąd, pomóżcie mi.

adb server is out of date.  killing... 
* daemon started successfully * 
error: insufficient permissions for device.

Z góry dziękuję za pomoc.


1
Odpowiedź użytkownika84847, poparta odniesieniem do oficjalnej dokumentacji dla programistów Androida, jest znacznie lepsza niż odpowiedź zaakceptowana przez Anwara Shaha, ponieważ w miarę możliwości powinniśmy unikać uruchamiania demonów jako root. Uruchamianie adb jako root powoduje, że komputer jest podatny na więcej ataków.
nealmcb

Odpowiedzi:


20

Czasami widziałem ten sam błąd na Ubuntu. Rozwiązaniem tego problemu jest uruchomienie adb z sudopoleceniem. Na przykład, jeśli naciskasz app.apkna sdcard, polecenie byłoby takie

sudo adb push app.apk /mnt/sdcard

Upewnij się również, że wybrałeś tryb „Debugowanie USB” w ustawieniach aplikacji (w GingerBread) lub w sekcji Programowanie (w IceCream Sandwich i nowszych). Jeśli adb już działa, powinieneś go najpierw zabić poleceniemsudo adb kill-server

Mam nadzieję, że to pomoże.


Mam go, ale nadal spróbuję również tej metody ... dzięki za pomoc
Neha Sharad Umachigi

5
„Rozumiem” ... Prosimy o uprzejmość, aby podzielić się, jeśli znalazłeś rozwiązanie, aby inni mogli skorzystać (tak jak chciałeś skorzystać, gdy zadałeś pytanie). Na przykład mam teraz ten problem, ale jestem zmuszony szukać gdzie indziej, chociaż jest to dokładnie ten sam problem, który opisujesz.
erjoalgo

2
Ta odpowiedź jest ryzykowna, ponieważ błędy w adb mogą przejąć cały komputer. Odpowiedź przy użyciu reguł udev autorstwa user84207, która jest obsługiwana przez odniesienie do oficjalnej dokumentacji dla programistów Androida, pozwala uniknąć tego problemu.
nealmcb

Jest to najprostsze i najłatwiejsze, a przynajmniej działające obejście problemu.
Anwar

Uwaga: To działało dla mnie, ponieważ sudoznajduje inną zainstalowaną wersję adbniż non-sudo. Dlatego to działa, a nie dlatego, że adbsamo wymaga więcej uprawnień.
Kevin Cooper

61

Natrafiłem na ten sam problem. Dodanie reguły udev jak wskazano tutaj pomogło:

Zaloguj się jako root, utwórz plik /etc/udev/rules.d/51-android.rulesi dodaj taki wiersz, aby dać uprawnienia każdemu w plugdevgrupie:

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"

W tym przykładzie identyfikator dostawcy to HTC. Musisz użyć identyfikatora dostawcy dla swojego urządzenia, który można uzyskać, uruchamiając lsusbi szukając linii podobnej do

Bus 002 Device 009: ID 2a47:9e18

W tym przykładzie sprzedawca ID byłoby 2a47, więc trzeba by wymienić 0bb4z 2a47. Prawidłowa linia brzmiałaby zatem:

SUBSYSTEM=="usb", ATTR{idVendor}=="2a47", MODE="0666", GROUP="plugdev"

Teraz przypisz uprawnienia do odczytu plików, przeładuj udev i przeładuj demona adb:

sudo chmod a+r /etc/udev/rules.d/51-android.rules
sudo udevadm control --reload-rules
adb kill-server
adb start-server

Może być konieczne odłączenie i ponowne podłączenie urządzenia do portu USB.


9
Identyfikator dostawcy USB można uzyskać za pomocą polecenia lsusb. Jest to pierwsza część pary oddzielonej dwukropkiem. Na przykład 18d1: 4e22 oznaczałoby, że identyfikator dostawcy to 18d1.
Peter Lamberg,

Konieczne może być „wyzwolenie” udev po dodaniu nowego pliku reguł (choć nie jestem pewien). Oto sposób na „wyzwolenie” askubuntu.com/questions/82470/… .
user29020

2
i / lub może być konieczne odłączenie i ponowne podłączenie urządzenia? Ale ta odpowiedź działała dla mnie i jest znacznie lepsza niż uruchamianie adb jako root. Twój użytkownik Ubuntu musi również należeć do plugdevgrupy. Uruchom, idaby się dowiedzieć.
nealmcb

2
To repo jest niezwykle pomocne, jeśli musisz pracować z wieloma urządzeniami github.com/M0Rf30/android-udev-rules
zamber

W dokumentach znajduje się również lista identyfikatorów dostawców .
Keith,

22

Odpowiedź Jorch914 na StackOverflow rozwiązała dla mnie ten problem:

Ok Więc w końcu znalazłem problem, najwyraźniej na tym urządzeniu musisz ustawić, aby połączyć się jako kamera (nawet po debugowaniu USB jest już włączony)

wprowadź opis zdjęcia tutaj

Również ten link opisuje proces konfiguracji


1
Tak, to było to! Musiałem „Wybierz konfigurację USB” na Androidzie N, który był domyślnie ustawiony na „Ładowanie”.
Dan Dascalescu

1
z jakiegokolwiek powodu zawsze byłem w stanie podłączyć mój piksel do komputera Mac i zacząć działać, ale kiedy przeniosłem się na stację deweloperską CentOS, musiałem to zrobić, aby poprosić o pozwolenie na debugowanie. Dzięki
bsautner,

2
Pracował dla mnie. Sztuką wydaje się być zmiana z „Ładowanie” na coś innego, dlaczego.
Bim

11

Te dwa proste polecenia rozwiązały dla mnie problem:

adb kill-server
adb start-server

Zauważ, że w przeciwieństwie do odpowiedzi semi-nowicjusza, nie potrzebuję sudo.


1
to zadziałało dla mnie
Sudip Bhandari,

Nie działał na Nexusie 5X podłączonym do Ubuntu 16.04, kiedy próbowałem uruchomić adb shell ls.
Dan Dascalescu

10

Właśnie natrafiłem na ten sam problem, ale oto, jak mogłem przez to przejść:

  • musisz zabić istniejący serwer adb, wydając następującą komendę: adb kill-server(może być źle, ale wydałem go AND bez sudo
  • uruchom serwer adb z odpowiednimi uprawnieniami, wydając: sudo adb start-server
  • voila. możesz wiedzieć, że wydajesz potrzebne polecenia

Nie jestem pewien, czy wiesz, ale istnieje pakiet zawierający adb. Wspominam o tym, ponieważ zauważyłem, że otrzymujesz odniesienie do starszej wersji adb. Możesz zainstalować, wydając następujące polecenie w wierszu polecenia:sudo apt-get install android-tools-adb

Mam nadzieję, że to pomoże.


ADB narzędzi platformy może być nowszy; w międzyczasie narzędzia te są nawet dostępne jako osobne pliki do pobrania.
Martin Zeitler,

2

Dzisiaj napotkałem insufficient permissions for devicebłąd, chociaż adbkilka minut wcześniej działał zgodnie z oczekiwaniami. Teraz dostaję:

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

$ adb shell
error: insufficient permissions for device

Na krótko przed napotkaniem błędu wyłączyłem Media device (MTP), ponieważ uznałem, że nie będę musiał używać MTP. Wygląda jednak na to, że debugowanie USB lub przynajmniej niektóre adbpolecenia wymagają Media device (MTP)włączenia.

Aby włączyć Media device (MTP)na Androidzie 4.4, przejdź do:

Settings
Storage
The "..." menu (in the upper right corner)
USB computer connection
Media device (MTP)

Gdy MTPjest wyłączone, lsusbwyświetla następujące informacje:

Bus 002 Device 071: ID [idVendor1]:[idProduct1] Google Inc.

Po włączeniu MTPlsusb wyświetla następujące informacje:

Bus 002 Device 072: ID [idVendor2]:[idProduct2] [idVendor string]

Programy idVendor i idProduct zmieniają się w zależności od tego, czy MTPjest włączony, czy nie.

Nie jestem ekspertem od Androida, więc możliwe jest, że powyższe zachowanie jest specyficzne dla mojego konkretnego modelu telefonu.


0

Może być z innego powodu. Po prostu pojawia się ten błąd podczas próby zainstalowania aplikacji na urządzeniu:

$ adb install platforms/android/build/outputs/apk/android-armv7-release.apk 
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
error: insufficient permissions for device
- waiting for device -

Stało się tak, ponieważ urządzenie nie było gotowe w odpowiednim trybie. Urządzenie współdzieliło połączenie 4G przez USB.

Można to tak nazwać:

$ adb devices -l
List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

33332EF19F3D00EC       no permissions usb:1-1.2

Wystarczyło więc wyłączyć udostępnianie połączeń w telefonie i zacząć od nowa.

Ogólnie rzecz biorąc, upewnij się, że adb deviceotrzymałeś następujący wynik za pomocą polecenia przed próbą wypchnięcia plików na urządzeniu

$ adb devices -l
List of devices attached
33332EF19F3D00EC       device usb:1-1.2

W takich przypadkach nie ma potrzeby zabijania ani restartowania serwera adb.

Prawdopodobnie byłaby to ta sama sytuacja, jeśli urządzenie zostało podłączone do przesyłania danych przez USB


0

Miałem ten sam problem i otrzymałem to niewystarczające uprawnienia. To, co zrobiłem, to odwołanie uprawnień USB dla mojego laptopa. Następnie zatrzymał się i rozpoczął debugowanie USB. Podłączyłem go z powrotem do laptopa i przyznałem uprawnienia do debugowania USB.


1
Czy możesz podać więcej informacji na temat tego procesu? Krok po kroku byłby idealny, więc OP może pójść za twoim przykładem. :)
ThatGuy,

0

Mam ten sam problem i rozwiązałem ten problem, dodając ścieżkę do swojej ścieżki_android_sdk_path do zmiennej środowiskowej, takiej jak

sudo export $PATH:/your_android_sdk_path/platform-tools/adb

jej swoje życzenie, jak chcesz dodać do swojego konta lub systemu szerokości edycji tych plików ~/.bashrcplik lub ~/.profile lub /etc/profile, /etc/bash.bashrc, or /etc/environmentjeśli u chcą, aby dodać do systemu powszechnego dostępu.

a następnie utwórz link do tego w koszu

sudo ln -s /your_android_sdk_path/platform-tools/adb /bin/adb

jeśli używałeś urządzeń adb lub jakiegokolwiek polecenia, najpierw zabij serwer jak

adb kill-server

następnie uruchom serwer jak

adb start-server
adb devices

teraz możesz bez problemu zobaczyć swoje urządzenia na liście


0

Odpowiedź na ten problem jest tutaj: https://github.com/snowdream/51-android

Jako programista Androida sugeruję, aby NIE używać „sudo” w celu wymuszenia użycia adb w dowolnym miejscu. Nie powinniśmy tego robić. Zasady, zasady i ograniczenia istnieją dla naszego własnego bezpieczeństwa.


0

Jeszcze inna możliwość: tethering przez USB również powoduje konflikt z adb. Wyłączenie go rozwiązuje problem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.