настроить устройство для разработки (???????????? нет разрешений) - PullRequest
269 голосов
/ 09 февраля 2012

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

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

  1. в моем проекте AndroidManifest.xml, добавил android:debuggable="true" к <application> element

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

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

  4. На моем компьютере создан файл /etc/udev/rules.d/51-android.rules со следующимcontent:

    SUBSYSTEM=="usb", ATTR{idVendor}=="04E8", MODE="0666", GROUP="plugdev" 
    
  5. На моем компьютере выполните команду chmod a+r /etc/udev/rules.d/51-android.rules

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

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

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

 adb kill-server
 adb start-server
 adb devices

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

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

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

Ответы [ 23 ]

437 голосов
/ 09 февраля 2012

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

338 голосов
/ 30 сентября 2012

У меня ничего не получалось, пока я наконец не нашел ответ здесь: 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, чтобы подтвердить, что теперь у него есть разрешение на доступ к телефону.

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

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

76 голосов
/ 13 августа 2012

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

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

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

50 голосов
/ 01 апреля 2015

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

28 голосов
/ 10 июля 2017

На этот вопрос отправлено много плохих ответов, начиная от настойчивого указания 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

Или вы можете использовать немного более длинную версию, которую я разместил на этом gist .

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

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

16 голосов
/ 24 сентября 2014

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

$ sudo -s
# adb kill-server
# adb start-server
8 голосов
/ 19 августа 2013

Для тех, кто использует 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, и он должен быть обнаружен при компиляции и запуске проекта.

5 голосов
/ 12 февраля 2013

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

  1. Введите "su", чтобы перейти к суперпользователю.
  2. your-path / adb kill-server.
  3. старт-сервер your-path / adb.
  4. Если ошибки не возникает, вы можете увидеть список устройств с «your-path / adb devices» в корневой учетной записи.
  5. Выйти из суперпользователя.
  6. Теперь вы можете выполнять «устройства adb» в своей учетной записи.

Наслаждайтесь.

4 голосов
/ 02 мая 2015

Я знаю, что это может быть немного поздно, но вот очень хорошая статья о том, как вручную добавить Android ADB USB Driver. Добавление драйвера Android ADB USB вручную в 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 ~/.androidgedit adb_usb.ini

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

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

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

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

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

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

Сработало для меня.

4 голосов
/ 17 июля 2014

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

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

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

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev" 

Потом я запускаю sudo udevadm control --reload-rules и все заработало!

...