Ответ 1
Что для меня работает, так это снова и снова запустить сервер adb. В linux: sudo adb kill-server
, а затем sudo adb start-server
. Затем он обнаружит почти все устройства из коробки.
Я пользуюсь телефоном Samsung Galaxy Nexus (платформа Android 4.0).
Я занимаюсь разработкой приложения для Android на ОС Ubuntu Linux. Я хотел бы запустить свое приложение непосредственно на мобильном телефоне 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
Так как я не видел свое устройство, а только ???????????? no permissions
???????????? no permissions
я запускаю следующие команды:
adb kill-server
adb start-server
adb devices
Но я все же получил:
List of devices attached
???????????? no permissions
Зачем? Что мне не хватает?
Что для меня работает, так это снова и снова запустить сервер adb. В linux: sudo adb kill-server
, а затем sudo adb start-server
. Затем он обнаружит почти все устройства из коробки.
Ничего не работало для меня, пока я наконец не нашел ответ здесь: 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
.
Введите следующие команды:
adb kill-server
sudo ./adb start-server
adb devices
Проблема заключается в том, что вы не используете сервер adb как root.
Пробовал все выше, никто не работал. Наконец, работал, когда я переключался с MTP на камеру (PTP).
На этот вопрос опубликовано много плохих ответов, начиная от настаивания на запуске 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.
В Archlinux это может происходить изредка. Исправление:
$ sudo -s
# adb kill-server
# adb start-server
Для тех, кто использует 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, и его следует обнаружить при компиляции и запуске проекта.
У меня была одна и та же проблема, решение такое же: (кстати, вам не нужно корневать свое устройство.)
Enjoy.
У меня была такая же проблема с моей 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
и все работает!
Я знаю, что это может быть немного поздно, но вот очень хорошая статья о том, как вручную добавить 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
Работал для меня.
Используйте 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
в официальной документации, и он решил эту проблему для меня.
Когда вы перезагружаете udev, убиваете сервер adb и запускаете путь для установки adb и устанавливаете sudk android sudo и делаете все на sudo. затем запустите устройства adb, чтобы решить проблему разрешения.
Мое устройство 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
Все предоставленные ответы предполагают, что вы можете отключить и снова подключить USB-кабель. В ситуациях, когда это невозможно (например, когда вы удалены), вы можете сделать следующее, чтобы по существу сделать то, что предложили бы правила udev для повторного подключения:
lsusb
Найдите устройство, о котором вы заботитесь, например:
Bus 003 Device 005: ID 18d1:4ee4 Google Inc. Nexus
Обратите внимание на номер шины, на котором он включен, и затем выполните, например. для шины 003
:
sudo chmod a+w /dev/bus/usb/003/*
Ясно, что это может быть более разрешительным, чем вы хотите (может быть, больше устройств подключено, чем только этот), но вы получаете идею.
Вы не должны запускать сервер adb
от имени пользователя root, как предлагают другие ответы. Вместо этого, если вы используете Arch Linux, сделайте следующее:
android-udev
с помощью PacmanПерезагрузить правила Udev:
# udevadm control --reload-rules
Добавьте себя в группу adbusers
а затем выйдите из системы и войдите в систему:
# usermod -aG adbusers $LOGNAME
Источник: https://wiki.archlinux.org/index.php/android#Configuring_adb
Попробуйте вместо GROUP="plugdev"
использовать основную группу вашего пользователя.
Пожалуйста, НЕ следуйте решениям, предлагающим использовать sudo
(sudo adb start-server
)! Это запустить ADB как root (администратор), и он не должен работать так !!! Это плохой обходной путь !
Все, что работает с правами root, может делать что угодно в вашей системе, если он создает или изменяет файл, может изменить свое разрешение, чтобы оно использовалось только пользователем root. Опять не надо!
Правильнее всего настроить свою систему так, чтобы ПОЛЬЗОВАТЕЛЬ имел разрешение, ознакомьтесь с этим руководством, которое я написал о том, как это сделать правильно.
В моем случае на ubuntu 12.04 LTS мне пришлось изменить мой режим HTC Incredible usb от заряда до носителя, а затем устройство появилось под adb. Конечно, в обоих случаях отладка уже была выполнена.
Я использовал su, и он начал работать. Когда я использую Jetbrains с обычным пользователем, я вижу эту проблему, но после перезапуска Jetbrains в режиме su я вижу свое устройство, ничего не делая.
Я использую Ubuntu 13.04 и Jetbrains 12.1.4
Как упоминалось выше, проблема вызвана не запуском 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, и ваш компьютер распознает ваше подключенное устройство. И вы можете запустить программу из любой директории. Это именно то, как я исправил проблему и подумал, что буду делиться ею.
Вы также можете попробовать отредактировать файл adb_usb.ini, расположенный по адресу /home/username/.android/. Этот файл содержит список поставщиков устройств, которые вы хотите подключить. Вы просто добавляете поставщика идентификатора устройства в новую строку (это один идентификатор в строке). Затем перезапустите adb-сервер и переустановите свое устройство.
Это работало для меня на Ubuntu 12.10.
Во всяком случае, что я сделал, чтобы решить эту проблему (на Ubuntu).
Определено, в каких случаях мне нужно запускать эти команды. Для большинства пользователей Ubuntu есть домашняя папка (скрытый файл .bashrc
).
В котором вы можете записать запуск этих команд. Но эти команды будут запущены при вводе команды bash
в консоли.
Поскольку у меня есть оболочка .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, где нам нужно жестко закодировать наш пароль.
.zshrc
ненужного, мы можем указать путь при запуске самой системы: Startup Applications Preferences
Там, где мы нажимаем "Добавить" и пишем нашу команду: /home/vadimm/.add_device_permissions.sh
./adb devices./adb kill-server sudo./adb devices./adb kill-server./adb devices
Если кто-то сталкивается со следующим сообщением об ошибке, когда они используют adb devices
no permissions (verify udev rules); see [http://developer.android.com/tools/device.html]
Выполните следующие действия
sudo -s
adb kill-server
adb start-server
Это исправило проблему для меня на пользовательском устройстве сборки Android.
По мере того как 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
И переключитесь обратно на
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/
Надеюсь, это поможет кому-то, кто тоже натолкнется на это.