Ошибка «Недостаточно прав» в команде «adb push» 12.04


57

Когда я попытался вставить файл apk в планшет, я получил эту ошибку, пожалуйста, помогите мне.

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

Заранее спасибо за помощь.


1
Ответ пользователя user84207, который поддерживается ссылкой на официальную документацию для разработчиков Android, намного лучше, чем принятый ответ Анвара Шаха, так как мы должны по возможности избегать запуска демонов от имени пользователя root. Запуск adb от имени root делает компьютер уязвимым для новых атак.
nealmcb

Ответы:


20

Я видел эту же ошибку иногда в Ubuntu. Обходной путь для этого - запустить adb с sudoкомандой. Например, если вы app.apkнажимаете на SDCard, команда будет

sudo adb push app.apk /mnt/sdcard

Также убедитесь, что вы выбрали режим «USB-отладка» в настройках приложения (в GingerBread) или в разделе «Разработка» (в IceCream Sandwich и выше). Если ADB уже запущен, вы должны сначала убить его с помощью командыsudo adb kill-server

Надеюсь, это поможет.


Я получил это, но все же попробую этот метод тоже ... спасибо за помощь
Неха Шарад Умачиги

5
«Я понял» ... Пожалуйста, будьте любезны поделиться, если вы нашли решение, чтобы другие могли извлечь выгоду (так как вы пытались принести пользу себе, когда задавали вопрос). Например, у меня сейчас есть эта проблема, но я вынужден искать в другом месте, хотя это та же самая проблема, которую вы описываете.
erjoalgo

2
Этот ответ опасен, так как ошибки в adb могут захватить весь компьютер. Ответ, использующий правила udev пользователя84207, который поддерживается ссылкой на официальную документацию для разработчиков Android, позволяет избежать этой проблемы.
nealmcb

Это самый простой и легкий и, по крайней мере, рабочий способ решения проблемы.
Анвар

Примечание: это сработало для меня, потому что sudoнаходит другую установленную версию, adbчем non-sudo. Вот почему это работает, а не потому, что adbсамо по себе требует больше привилегий.
Кевин Купер

61

Я столкнулся с этой же проблемой. Добавление правила udev, как указано здесь , помогло:

Войдите в систему как пользователь root, создайте файл /etc/udev/rules.d/51-android.rulesи добавьте строку, подобную этой, чтобы дать разрешения любому пользователю в plugdevгруппе:

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

В этом примере идентификатор поставщика - HTC. Вам нужно использовать идентификатор поставщика для вашего устройства, который можно получить, запустив lsusbи выполнив поиск строки

Bus 002 Device 009: ID 2a47:9e18

В этом примере ваш идентификатор поставщика будет 2a47, поэтому вам придется заменить 0bb4на 2a47. Таким образом, правильная строка будет выглядеть так:

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

Теперь назначьте разрешения на чтение для файлов, перезагрузите udev и перезагрузите демон adb:

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

Возможно, вам придется отключить и снова подключить ваше устройство к USB-порту.


9
Вы можете получить идентификатор производителя USB с помощью команды lsusb. Это первая часть двоеточия, разделенная парой. Например, 18d1: 4e22 будет означать, что идентификатор поставщика равен 18d1.
Питер Ламберг

Возможно, вам понадобится «вызвать» udev после добавления нового файла правил (хотя я не уверен). Вот способ «вызвать» askubuntu.com/questions/82470/… .
user29020

2
и / или вам может понадобиться отключить и снова подключить устройство? Но этот ответ сработал для меня, и это намного лучше, чем запуск ADB от имени пользователя root. Ваш пользователь Ubuntu также должен быть частью plugdevгруппы. Беги, idчтобы узнать.
nealmcb

2
Этот репозиторий является чрезвычайно полезным , если вам приходится работать с большим количеством устройств github.com/M0Rf30/android-udev-rules
zamber

В документах также есть список идентификаторов поставщиков .
Кит

22

Ответ Jorch914 на StackOverflow решил эту проблему для меня:

Итак, я наконец нашел проблему, по-видимому, на этом устройстве вы должны установить для подключения в качестве камеры (даже после отладки USB уже включен)

введите описание изображения здесь

Также эта ссылка описывает процесс настройки


1
Да, это было так! Мне пришлось «Выбрать конфигурацию USB» на Android N, которая по умолчанию была установлена ​​на «Зарядка».
Дан Даскалеску

1
по какой-то причине я всегда мог подключить свой пиксель к Mac и начать работать, но когда я перешел на рабочую станцию ​​CentOS, мне пришлось это сделать, чтобы он запросил разрешение на отладку. Спасибо
bsautner

2
Работал на меня. Уловка, кажется, состоит в том, чтобы изменить это от "Зарядки" до чего-то еще, почему бы то ни было.
Бим

11

Эти две простые команды решили проблему для меня:

adb kill-server
adb start-server

Обратите внимание, что в отличие от ответа полу-новичка мне не нужен sudo.


1
это сработало для меня
Судип Бхандари

Не работал для Nexus 5X, подключенного к Ubuntu 16.04, когда я пытался запустить adb shell ls.
Дан Даскалеску

10

Я просто пробежался по той же проблеме, но вот как я смог ее пройти:

  • Вы должны уничтожить существующий сервер ADB, введя следующую команду: adb kill-server(это может быть неправильно, но я выдал его с И без sudo
  • Запустите сервер ADB с соответствующими разрешениями, введя: sudo adb start-server
  • вуаля. вы можете знать, выдает любые команды вам нужно

Не уверен, если вы знаете, но есть пакет, который включает в себя ADB. Я упоминаю об этом, потому что заметил, что вы получаете ссылку на более старую версию ADB. Вы можете установить, введя в командной строке следующее:sudo apt-get install android-tools-adb

Надеюсь, это поможет.


АБР инструментов платформы может быть новее; Эти инструменты даже доступны для отдельной загрузки.
Мартин

2

Сегодня я столкнулся с insufficient permissions for deviceошибкой, хотя adbработал несколько минут назад, как и ожидалось. Теперь я получаю:

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

$ adb shell
error: insufficient permissions for device

Незадолго до появления ошибки я отключил ее Media device (MTP), так как полагал, что использовать ее не нужно MTP. Однако, кажется, что отладка USB или, по крайней мере, некоторые adbкоманды, требуют, чтобы это Media device (MTP)было включено.

Чтобы включить Media device (MTP)на Android 4.4, перейдите на:

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

Когда MTPотключено, lsusbпоказывает следующее:

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

После включения MTPlsusb показывает следующее:

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

IdVendor и idProduct меняются в зависимости от того MTP, включен он или нет.

Я не эксперт по Android, поэтому возможно, что описанное выше поведение характерно для моей конкретной модели телефона.


0

Это может быть из другой причины. Я просто получаю эту ошибку, пытаясь установить APK на устройстве:

$ 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 -

Это произошло потому, что устройство не было готово в правильном режиме. Устройство передавало соединение 4G через USB.

Это можно узнать так:

$ 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

Таким образом, этого было достаточно, чтобы отключить совместное использование телефона и начать заново.

В общем, убедитесь, что получили следующий результат с помощью adb deviceкоманды, прежде чем пытаться отправить файлы на устройство.

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

В этих случаях нет необходимости убивать или перезагружать сервер adb.

Вероятно, была бы такая же ситуация, если вы установили устройство для передачи данных через USB


0

У меня была та же проблема, и я получил, что недостаточно разрешений. Что я сделал, так это отменил полномочия USB для моего ноутбука. Затем остановился и начал отладку по USB. Подключил его обратно в ноутбук и предоставил полномочия по отладке USB.


1
Можете ли вы предоставить больше информации об этом процессе? Шаг за шагом будет идеальным, поэтому ОП может последовать вашему примеру. :)
ThatGuy

0

Я столкнулся с той же проблемой, и я решил ее, добавив путь к your_android_sdk_path к переменной окружения, например

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

Это ваше желание, как вы хотите добавить это в свою учетную запись или всю систему, отредактировав этот ~/.bashrcфайл или ~/.profile или /etc/profile, /etc/bash.bashrc, or /etc/environmentесли вы хотите добавить к общесистемному доступу.

а затем создать ссылку на это в бен

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

если вы использовали устройства adb или любую команду, то сначала убейте сервер как

adb kill-server

затем запустить сервер как

adb start-server
adb devices

теперь вы можете видеть, что ваши устройства перечислены правильно, без проблем


0

Ответ на эту проблему здесь: https://github.com/snowdream/51-android

Как разработчик Android, я предлагаю вам не использовать «sudo», чтобы заставить использование adb где-либо. Это не то, что мы должны делать. Правила, политики и ограничения существуют для нашей собственной безопасности.


0

Еще одна возможность: USB-модем также конфликтует с ADB. Отключение решает проблему для меня.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.