it-swarm.com.ru

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

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

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

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

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

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

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

    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

Зачем? Что мне не хватает?

269
Leem.fin

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

435
WarrenFaith

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

338
grebulon

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

adb kill-serverSudo ./adb start-serveradb devices

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

76
iancrowther

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

50
Sabeer Mohammed

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

28
Alex P.

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

$ Sudo -s
# adb kill-server
# adb start-server
16
Keenan Verbrugge

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

8
jaga

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

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

Наслаждаться.

5
Jeffrey Yang

У меня была такая же проблема с моей Galaxy S3. Моя проблема заключалась в том, что значение idVendor04E8 было неправильным. Чтобы найти подходящий, подключите свой смартфон к компьютеру и запустите 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 и все работает!

4
user3714693

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

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

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

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

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

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

4
dc-aoxn

Использовать поддерживаемые udev-правила сообщества GitHub M0Rf30/Android-udev-rules

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

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

  1. Следуйте инструкциям по адресу http://developer.Android.com/guide/developing/device.html
  2. Замените идентификатор поставщика "0bb4" на "18d1" в /etc/udev/rules.d/51-Android.rules. Или добавьте еще одну строку, которая гласит: SUBSYSTEM == "usb", SYSFS {idVendor} == "18d1", MODE = "0666"
  3. перезагрузите компьютер или просто перезапустите службу udev.
2
krishnendu

Вы не должны запускать сервер adb от имени пользователя root, как предлагают другие ответы. Вместо этого, если вы используете Arch Linux, сделайте следующее:

  1. Установите пакет Android-udev с Pacman
  2. Перезагрузить правила Udev:

    # udevadm control --reload-rules
    
  3. Добавьте себя в группу adbusers, а затем выйдите из системы и войдите в систему:

    # usermod -aG adbusers $LOGNAME
    

Источник: https://wiki.archlinux.org/index.php/Android#Configuring_adb

1
Babken Vardanyan

Без отключения

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

lsusb

Найдите устройство, которое вас волнует, например:

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

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

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

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

1
Christian Fritz

Мое устройство 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
luciana

Когда вы перезапустите udev, убейте сервер adb и запустите сервер adb, перейдите Android путь установки sdk и выполните все в Sudo. затем запустите устройства adb, это решит проблему с правами доступа.

1
Chinthaka Senanayaka

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

0
Yury

Пожалуйста НЕ следуйте решениям, предлагающим использовать Sudo (Sudo adb start-server)! Это запустить ADB как root (администратор), и он не должен работать так !!! Это плохой обходной путь !

Все, что работает с правами root, может делать что угодно в вашей системе, если он создает или изменяет файл, может изменить свое разрешение, чтобы оно использовалось только пользователем root. Опять не надо!

Правильно настроить вашу систему так, чтобы ПОЛЬЗОВАТЕЛЬ имел разрешение, проверьте это руководство я написал на как сделать это правильно.

0
Daniele Segato