настроить устройство для разработки (???????????? нет разрешений)

227

Я использую телефон галактики Samsung Nexus (платформа Android 4.0).

Я разрабатываю приложение для Android в ОС Linux Ubuntu. Я хотел бы запустить приложение непосредственно на устройстве Samsung, поэтому выполнил следующие шаги настройки:

  • в моем файле AndroidManifest.xml проекта, добавьте android:debuggable="true" в элемент <application>

  • На устройстве Настройки > Безопасность включить Неизвестные источники

  • На устройстве Настройки > Параметры разработчика включить Отладка USB

  • На моем компьютере создайте файл /etc/udev/rules.d/51-android.rules, содержимое файла:

    SUBSYSTEM == "usb", ATTR {idVendor} == "04E8", MODE = "0666", GROUP = "plugdev"

  • На моем компьютере выполните команду chmod a+r /etc/udev/rules.d/51-android.rules

Затем я открываю терминал и выполняю команду adb devices на моем компьютере, я получил:

List of devices attached 
????????????    no permissions

Поскольку я не видел свое устройство, но только "без прав доступа", я запускаю следующие команды:

 adb kill-server
 adb start-server
 adb devices

Но я все еще получаю:

List of devices attached 
 ????????????   no permissions

Почему? Что мне не хватает?

  • 0
    после запуска adb kill-server вы получили сообщение, что * демон не запущен. запускать его сейчас на порту 5037 * * демон успешно запущен * --- если не попробовать, пока вы не получите это сообщение
  • 2
    Попробуйте проверить, что ваш пользователь находится в группе plugdev .
Показать ещё 1 комментарий
Теги:
adb

22 ответа

342
Лучший ответ

Что для меня работает, так это снова и снова запустить сервер adb. В linux: sudo adb kill-server, а затем sudo adb start-server. Затем он обнаружит почти все устройства из коробки.

  • 0
    Я использую root для выполнения команды «adb devices» в <android-SDK> / platform-tool /, я получил «Нет команды 'adb' found», почему?
  • 0
    Вы могли бы вставить точную команду, которую вы используете? Я использую устройства sudo /opt/android/platform-tools/adb devices
Показать ещё 10 комментариев
331

Ничего не работало для меня, пока я наконец не нашел ответ здесь: http://ptspts.blogspot.co.il/2011/10/how-to-fix-adb-no-permissions-error-on.html

Я копирую текст здесь, если он исчезнет в будущем.

Создайте файл с именем /tmp/android.rules со следующим содержимым (шестнадцатеричные номера поставщиков были взяты со страницы списка поставщиков):

SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="413c", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0489", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2116", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="17ef", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2080", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2257", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d4d", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04da", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1f53", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04dd", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1bbb", MODE="0666"

Выполните следующие команды:

sudo cp /tmp/android.rules /etc/udev/rules.d/51-android.rules
sudo chmod 644   /etc/udev/rules.d/51-android.rules
sudo chown root. /etc/udev/rules.d/51-android.rules
sudo service udev restart
sudo killall adb

Отсоедините кабель USB между телефоном и компьютером.

Подсоедините телефон.

Запустите adb devices, чтобы подтвердить, что теперь у него есть разрешение на доступ к телефону.

Обратите внимание, что вместо , MODE="0666" можно использовать , USER="$LOGINNAME" в файле .rules, заменив $LOGINNAME на ваше имя для входа, то есть на то, что печатает id -nu.

В некоторых случаях может потребоваться предоставить файлу правил udev имя, которое сортируется близко к концу, например z51-android.rules.

  • 7
    Примечание: для Ubuntu Precise имя файла - 70-android.rules согласно этому сообщению: esausilva.com/2010/05/13/… . Также спасибо за сообщение о том, что вам нужно перезапустить udev и убить все процессы adb. Работал как шарм!
  • 0
    Спасибо, это сработало !!
Показать ещё 19 комментариев
59

Введите следующие команды:

adb kill-server sudo ./adb start-server adb devices

Проблема заключается в том, что вы не используете сервер adb как root.

  • 4
    хотя идея та же, что и в принятом ответе, этот мне помог только благодаря предоставленному примеру. Спасибо
  • 1
    @ user907860 на самом деле это лучше, чем принятый ответ, потому что он объясняет, почему вы должны написать sudo :) (чего я не делал, когда увидел принятый ответ)
Показать ещё 5 комментариев
32

Пробовал все выше, никто не работал. Наконец, работал, когда я переключался с MTP на камеру (PTP).

  • 2
    Для тех, кто интересуется, как это сделать ... Настройки системы> Память> Верхняя правая кнопка: USB-подключение к компьютеру> Подключить как выбрать камеру (PTP) вместо медиаустройства (MTP)
  • 3
    человек, я искал решение как два часа, это работает для меня на Ubuntu 16.04, спасибо
Показать ещё 5 комментариев
13

В Archlinux это может происходить изредка. Исправление:

$ sudo -s
# adb kill-server
# adb start-server
  • 0
    Я не уверен, что это было единственной вещью, которая заставляет это работать ... Я попробовал вышеупомянутые вещи Но без этой записи Ubuntu на VBox мой LG G3 не был авторизован. Спасибо Кинан
  • 0
    Я не знаю почему, но sudo adb kill-server; sudo adb start-server не работал, но этот работал.
Показать ещё 1 комментарий
11

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

Вот один самый короткий и самый универсальный рецепт для получения разрешений для всех устройств adb и fastboot:

echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:ff420?:*", MODE="0666"' | sudo tee /etc/udev/rules.d/99-android.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --verbose --action=add --subsystem-match=usb

Что касается того, что OP делал неправильно в своем вопросе, это не перезаписывало правила udev после редактирования файла .rules.

Кроме того, OP не сообщил, какую версию Android (aka ROM) у него на телефоне. Значение idVendor устанавливается в программном обеспечении, и поэтому оно зависит от ПЗУ. Таким образом, значение 04E8, которое он использовал в своем первоначальном правиле, могло бы работать только для устройств с запасными ПЗУ Samsung. Но это не проблема для этого правила udev - он соответствует всем устройствам с интерфейсами adb или fastboot, независимо от их VendorID.

  • 0
    Единственный пропущенный шаг, чтобы увидеть, как это работает, - adb kill-server перед устройствами adb.
  • 1
    Похоже, это больше не работает на Android 8.1. Как вы узнали, что adb сообщает как идентификатор устройства?
Показать ещё 3 комментария
6

Для тех, кто использует debian, руководство по настройке устройства под Ubuntu для создания файла "/etc/udev/rules.d/51-android.rules" не работает. Я выполнил инструкции здесь. Опишем здесь же здесь для справки.

Изменить этот файл как суперпользователь

sudo nano /lib/udev/rules.d/91-permissions.rules

Найдите текст, похожий на этот

# usbfs-like devices 
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \ MODE="0664″

Затем измените режим на 0666, как показано ниже

# usbfs-like devices 
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \ MODE="0666″

Это позволяет adb работать, однако нам все равно нужно настроить устройство, чтобы оно было распознано. Нам нужно создать этот файл как суперпользователь,

sudo nano /lib/udev/rules.d/99-android.rules

и введите

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0bb4″, MODE="0666″

вышеуказанная строка для HTC, следуйте за сообщением @grebulon для полного списка.

Сохраните файл, а затем перезапустите udev в качестве суперпользователя

sudo /etc/init.d/udev restart

Подключите телефон через USB, и его следует обнаружить при компиляции и запуске проекта.

  • 0
    Префект это единственный правильный путь.
5

У меня была одна и та же проблема, решение такое же: (кстати, вам не нужно корневать свое устройство.)

  • Введите "su", чтобы переключиться на суперпользователя.
  • your-path/adb kill-server.
  • start-server вашего пути /adb.
  • Если ошибка не возникает, вы можете увидеть список устройств с помощью "устройств вашего пути /adb " в учетной записи root.
  • Выйти из суперпользователя.
  • Теперь вы можете выполнять "adb-устройства" в своей учетной записи.

Enjoy.

  • 1
    Если вам не удается войти в систему с помощью su , используйте sudo su . Я сделал. А также, если вы не знаете, как выйти из системы, используйте exit .
4

была та же проблема с моей Galaxy S3. Моя проблема заключалась в том, что значение idVendor (04E8) не было правильным. Чтобы найти правильный, подключите смартфон к компьютеру и запишите в терминал команду

    lsusb

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

    Bus 002 Device 010: ID 18d1:d002 Google Inc.

в моем случае. Таким образом, правильное значение idVendor равно "18d1". Поэтому строка в файле /etc/udev/rules.d/51-android.rules должна быть в моем случае

    SUBSYSTEM=="usb", ATTR{idVendor}=="04E8", MODE="0666", GROUP="plugdev" 

чем я запускаю на своем компьютере команду

    chmod a+r /etc/udev/rules.d/51-android.rules

Everithing работает!

  • 1
    Возможно, вы ATTR{idVendor}=="18d1" виду: ATTR{idVendor}=="18d1"
2

Я знаю, что это может быть немного поздно, но вот очень хорошая статья о том, как вручную добавить USB-драйвер Android ADB. Вручную добавляет USB-драйвер Android ADB в Ubuntu 14.04 LTS

Отредактировано для добавления содержимого ссылки

Действия

Примечание.. Убедитесь, что вы подключили устройство Android в режиме отладки USB.

Откройте терминал (CTRL + ALT + T) и введите команду: lsusb

Теперь вы можете получить аналогичный ответ на этот вопрос:
Bus 002 Device 013: ID 283b:1024

Примечание: Что касается этого Bus 002 Device 008: ID 283b:1024
{idVendor}=="283b" {idProduct}=="1024″

Теперь введите следующую команду: sudo gedit /etc/udev/rules.d/51-android.rules
Это создаст файл правил Android (51-android.rules) или откройте существующий в указанном месте (/etc/udev/rules.d)

Добавить новую строку в этот файл:
SUBSYSTEM=="usb", ATTRS{idVendor}=="283b", ATTRS{idProduct}=="1024″, MODE="0666″

Примечание Изменить значения idVendor и idProduct значениями вашего устройства. Сохранить и закрыть.

Теперь введите следующую команду:
sudo chmod a+rx /etc/udev/rules.d/51-android.rules - предоставить разрешение на чтение/выполнение
sudo service udev restart - Перезапустите службу udev

Теперь нам нужно добавить idVendor в adb_usb.ini. Введите следующие команды:
cd ~/.android
gedit adb_usb.ini

Добавьте следующее значение 0x283b

Это ничего, кроме 0x (idVendor value). Поэтому замените значение на. в отношении значения вашего устройства Сохраните и закройте файл.

Теперь введите следующую команду:
sudo service udev restart

Подключите Android-устройство и снова подключите его.
Теперь введите следующую команду:
adb kill-server
adb devices

Иди сюда! Ваше устройство должно быть указано.

Скопировано из Вручную добавляет USB-драйвер Android ADB в Ubuntu 14.04 LTS

Работал для меня.

  • 0
    @bummi Спасибо.
  • 0
    Спасибо @czprobity. Кажется, я возвращаюсь сюда каждые несколько месяцев ... Это тоже работает для меня, но я думаю, что вам может понадобиться 'adb start-server' после 'adb kill-server'
2
  • Следуйте инструкциям на http://developer.android.com/guide/developing/device.html
  • Замените идентификатор поставщика "0bb4" на "18d1" в файле /etc/udev/rules.d/51-android.rules. Или добавьте еще одну строку, которая гласит:   SUBSYSTEM == "usb", SYSFS {idVendor} == "18d1", MODE = "0666"
  • перезагрузите компьютер или просто перезапустите службу udev.
  • 0
    вышеуказанная ссылка теперь не работает
1

Без отсоединения

Все предоставленные ответы предполагают, что вы можете отключить и снова подключить USB-кабель. В ситуациях, когда это невозможно (например, когда вы удалены), вы можете сделать следующее, чтобы по существу сделать то, что предложили бы правила udev для повторного подключения:

lsusb

Найдите устройство, о котором вы заботитесь, например:

Bus 003 Device 005: ID 18d1:4ee4 Google Inc. Nexus

Обратите внимание на номер шины, на котором он включен, и затем выполните, например. для шины 003:

sudo chmod a+w /dev/bus/usb/003/*

Ясно, что это может быть более разрешительным, чем вы хотите (может быть, больше устройств подключено, чем только этот), но вы получаете идею.

  • 0
    Чтобы применить новое правило udev без повторного подключения устройства, просто используйте udevadm trigger --verbose --action=add --subsystem-match=usb .
  • 0
    очень хорошо! @AlexP.
1

Мое устройство POSITIVO, а моя операционная система Ubuntu 14.04 LTS Итак, моя проблема была в имени переменной

Я создаю файл /etc/udev/rules.d/51-android.rules и положите SUBSYSTEM=="usb", SYSFS{idVendor}=="1662", MODE="0666"

Я отключил устройство и выполните:

$ sudo udevadm control --reload-rules
$ sudo service udev restart

после этого я снова подключил устройство Android в режиме разработчика и

$ adb devices

List of devices attached 
1A883XB1K   device
1

Когда вы перезагружаете udev, убиваете сервер adb и запускаете путь для установки adb и устанавливаете sudk android sudo и делаете все на sudo. затем запустите устройства adb, чтобы решить проблему разрешения.

0

Сообщество GitHub поддерживает udev-rules

https://github.com/M0Rf30/android-udev-rules/blob/master/51-android.rules

Это самый полный список правил udev, который я видел до сих пор, даже больше, чем рекомендуемый в настоящее время sudo apt-get install android-tools-adb в официальной документации, попробуйте.

  • 1
    зачем беспокоиться о «ведении списка», когда одно правило работает для всех? stackoverflow.com/a/45006231/1778421
  • 0
    @AlexP. спасибо я не знал об этом методе. Любая идея, почему официальное руководство не рекомендует это вместо этого?
Показать ещё 1 комментарий
0

Вы также можете попробовать отредактировать файл adb_usb.ini, расположенный по адресу /home/username/.android/. Этот файл содержит список поставщиков устройств, которые вы хотите подключить. Вы просто добавляете поставщика идентификатора устройства в новую строку (это один идентификатор в строке). Затем перезапустите adb-сервер и переустановите свое устройство.

Это работало для меня на Ubuntu 12.10.

0

Попробуйте вместо GROUP="plugdev" использовать основную группу вашего пользователя.

  • 0
    Я использую свое имя пользователя, это не помогает
-1

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

Я использую Ubuntu 13.04 и Jetbrains 12.1.4

-2

Если кто-то сталкивается со следующим сообщением об ошибке, когда они используют adb devices

no permissions (verify udev rules); see [http://developer.android.com/tools/device.html]

Выполните следующие действия

sudo -s 
adb kill-server
adb start-server

Это исправило проблему для меня на пользовательском устройстве сборки Android.

-2

Как упоминалось выше, проблема вызвана не запуском adb с правами root.

Я хотел добавить свое решение проблемы Ubuntu 12.04 с Android Studio 0.8.2. Что также покажет вам, как открыть студию Android без ввода полного пути:

Сначала вы добавляете android-studio/bin в свой PATH, редактируя файл .bashrc.

cd ~/
gedit .bashrc
//add the below line withing your .bashrc file, I prefer you to put it at the
//very bottom
HOME=$HOME:~/<android-studio>/bin
//save file, exit terminal, open new terminal
studio.sh   // will now open android studio from any directory in terminal

Это позволит вам запускать программу с помощью команды studio.sh из терминала из любого каталога. Но это не позволит вам запускать его с помощью sudo из терминала из любого каталога!!! Это возвращает нас к нашей основной проблеме. Для этого нам нужно будет отредактировать файл /etc/sudoers.

 cd /etc
 sudo gedit sudoers
 //edit the secure_path="" to include /home/<your-username>/<android-studio>/bin
 //save file, exit terminal, open new terminal
 gksudo studio.sh // will now open android studio as root from any direcotry in terminal
                  // I use gksudo rather than sudo when opening a graphical program

Теперь adb запускается с правами root, и ваш компьютер распознает ваше подключенное устройство. И вы можете запустить программу из любой директории. Это именно то, как я исправил проблему и подумал, что буду делиться ею.

-2

В моем случае на ubuntu 12.04 LTS мне пришлось изменить мой режим HTC Incredible usb от заряда до носителя, а затем устройство появилось под adb. Конечно, в обоих случаях отладка уже была выполнена.

-4

По мере того как Debian идет, я делал все, что использовал Kali. После команды chown и перезагрузки я потерял использование своего ноутбука и внешней клавиатуры/мыши. Двойная загрузка Ubuntu Studio, я загрузился к этому, смонтировал раздел Debian, открыл терминал и

sudo su rm path/to/all.android.rules

Оба в /libs/udev... AND/etc/udev AND

gedit/lib/udev/rules.d/91-permissions.rules

И переключитесь обратно на

устройства, похожие на usbfs

SUBSYSTEM == "usb", ENV {DEVTYPE} == "usb_device", \MODE = "0666"

Перезагрузитесь, и все клавиатуры/мыши снова работают. Кроме того, перезагрузитесь обратно в Kali/Debian без андроидов и "нормальных" 91-license.rules и...

adb

Работает так, как должно - с разрешениями и т.д. У меня все еще есть мой пользователь без root в группе plugdev. Укажите путь adb в $PATH. У вас есть adb at/home/user/andy/sdk/platform-tools/

Надеюсь, это поможет кому-то, кто тоже натолкнется на это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню