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

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

Я занимаюсь разработкой приложения для 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 ???????????? no permissions я запускаю следующие команды:

 adb kill-server
 adb start-server
 adb devices

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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

$ sudo -s
# adb kill-server
# adb start-server

Ответ 7

Для тех, кто использует 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

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

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

Enjoy.

Ответ 9

У меня была такая же проблема с моей 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 и все работает!

Ответ 10

Я знаю, что это может быть немного поздно, но вот очень хорошая статья о том, как вручную добавить 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

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

Ответ 11

  • Следуйте инструкциям на 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.

Ответ 12

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

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

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

Ответ 13

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

Ответ 14

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

Ответ 15

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

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

lsusb

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

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

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

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

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

Ответ 16

Вы не должны запускать сервер 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

Ответ 17

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

Ответ 18

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

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

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

Ответ 19

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

Ответ 20

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

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

Ответ 21

Как упоминалось выше, проблема вызвана не запуском 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, и ваш компьютер распознает ваше подключенное устройство. И вы можете запустить программу из любой директории. Это именно то, как я исправил проблему и подумал, что буду делиться ею.

Ответ 22

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

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

Ответ 23

Во всяком случае, что я сделал, чтобы решить эту проблему (на Ubuntu).

  1. Определено, в каких случаях мне нужно запускать эти команды. Для большинства пользователей Ubuntu есть домашняя папка (скрытый файл .bashrc).

    В котором вы можете записать запуск этих команд. Но эти команды будут запущены при вводе команды bash в консоли.

  2. Поскольку у меня есть оболочка .zshrc, я сделал следующее:

    открытая консоль: gedit.zshrc

Когда файл откроется, добавьте следующую строку:

./.add_device_permissions.sh

После или до этого нам нужно создать этот файл: .add_device_permissions.sh в котором мы напишем следующее:

#!/bin/bash
# Add permissions
ADB="/home/vadimm/Android/Sdk/platform-tools/adb"
$ADB devices
$ADB kill-server
cat .permissions_redmi_note | sudo -S $ADB devices
$ADB kill-server
cat .permissions_redmi_note | sudo -S $ADB devices

Также нам нужно создать .permissions_redmi_note, где нам нужно жестко закодировать наш пароль.

  1. Чтобы не добавлять в файл .zshrc ненужного, мы можем указать путь при запуске самой системы: Startup Applications Preferences

Там, где мы нажимаем "Добавить" и пишем нашу команду: /home/vadimm/.add_device_permissions.sh

  1. Также вы можете попробовать использовать в командной строке следующие команды: ./adb devices./adb kill-server sudo./adb devices./adb kill-server./adb devices

Ответ 24

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

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

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

sudo -s 
adb kill-server
adb start-server

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

Ответ 25

По мере того как 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/

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