Я только что получил свой блестящий новый Wileyfox Swift — и перед тем, как использовать его, я хочу его oem unlock
и рутировать (как я обычно делаю с новыми устройствами;) Проблема в том, что на устройстве включена отладка по usb/etc/udev/rules.d/51-android.rules
, и соответствующая строка существует , устройство не видно adb devices
.
Я знаю, что на этом сайте разбросано несколько ответов, но их либо трудно найти, либо они охватывают конкретное устройство, либо не охватывают все шаги, которые мне, наконец, понадобились. Поэтому я использую это как шанс для канонического, независимого от устройства вопроса и даю на него подробный ответ ниже:
Как я могу сделать так, чтобы мое Android-устройство было видно и использовалось adb
в Linux?
Делается это в Настройки › Разработка . Если у вас нет этой записи в меню настроек, перейдите в « Настройки»> «О программе», прокрутите до «Номер сборки» и вбивайте его, как обезьяна, пока ваше устройство не поздравит вас со тем, что вы стали разработчиком. Вернитесь на главную страницу меню « Настройки », и внизу вы должны увидеть настройки «Разработка» (или «Разработчики»). Введите его и включите здесь отладку по USB .
Для начала нам нужно узнать, как устройство идентифицируется на шине USB. Для этого, когда Android-устройство НЕ подключено, возьмите оболочку и выполните команду lsusb
. Затем подключите устройство и снова запустите команду. Найдите новую линию. Для Wileyfox Swift это «безымянное устройство»:
Bus 004 Device 003: ID 2970:2282
Теперь нам нужны числа в конце вышеуказанной строки: 2970:2282
. В них указан производитель (2970) и само устройство (2282). Имея эти детали, нам нужна корневая оболочка на нашем компьютере с Linux для редактирования (или создания, если она еще не существует) /etc/udev/rules.d/51-android.rules
файла. Там добавьте строку для вашего устройства. В следующей строке примера показано, как это выглядит для Wileyfox Swift:¹
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2970", ATTRS{idProduct}=="2282", MODE="0666", GROUP="androiddev", SYMLINK+="android%n"
Если у вас другое устройство, замените идентификаторы производителя и продукта теми, которые вы нашли выше при запуске lsusb
. Краткое пояснение к строке:
SUBSYSTEMS=="usb"
: очевидно, это правило только для USB ;)ATTRS{idVendor}=="2970"
: идентификатор поставщика устройства, для которого это правилоATTRS{idProduct}=="2282"
: идентификатор устройстваMODE="0666"
: разрешения, которые должен получить узел устройства. 0666
довольно слабый, давая каждому пользователю в вашей системе разрешение на чтение и запись, поэтому, если вы обеспокоены, вы можете попробовать заменить его на 0660
(предоставив только владельцу и группе чтение-запись и запретив все другим).GROUP="androiddev"
: к какой группе должен принадлежать узел устройства. Это должна быть группа, к которой принадлежат пользователи, предназначенные для работы с устройством.SYMLINK+="android%n"
: просто чтобы дать узлу красивое имя, чтобы его было легче найти в /dev
(в моем случае позже оно появилось там как /dev/android5
)Это правило введено в /etc/udev/rules.d/51-android.rules
, мы должны сказать udev
, чтобы использовать его. Самый безопасный способ (рядом с перезагрузкой ;) - перезапустить udev
службу. В зависимости от вашего дистрибутива Linux это можно сделать либо через, либо sudo service udev restart
через sudo /etc/init.d/udev restart
.
Сделав это, оставьте корневую оболочку. Отключите и снова подключите устройство Android, повторите попытку adb devices
. Теперь появилось большинство устройств, но не Wileyfox Swift , который явно хочет дополнительных объятий. Если вы находитесь в такой ситуации, откройте (или создайте, если он не существует) файл ~/.android/adb_usb.ini
и добавьте в него одну строку, назвав поставщика, которого вы узнали lsusb
выше; для Swift это будет 0x2970
(да, здесь вам нужно добавить к нему префикс, 0x
чтобы указать, что это шестнадцатеричное число). Затем перезапустите сервер ADB: adb kill-server && adb start-server
. Отключите и снова подключите устройство. Теперь adb devices
должен увидеть это.
Вы могли заметить, adb devices
сказал вам что-то вроде 0123456789ABCDEF unauthorized
. Это нормально и для вашей (устройства) безопасности: сначала ваш компьютер должен быть авторизован, чтобы иметь доступ к устройству. Так что просто запустите adb shell
сейчас — который будет закрыт с помощью error: device unauthorized. Please check the confirmation dialog on your device.
Следуйте этому совету (при желании установите флажок, чтобы навсегда авторизовать свой компьютер), и все готово: теперь вы можете использовать adb для доступа к вашему устройству.
¹ Обратите внимание, что в более поздних версиях Linux синтаксис правил UDEV немного изменился, как, например , указал jcomeau_ictx в своем комментарии. Для значений, которые мы нашли выше, это будет:
SUBSYSTEM=="usb", ATTR{idVendor}=="2970", ATTR{idProduct}=="2282", MODE="0666", GROUP="plugdev", SYMLINK+="android%n"
Два отличия: теперь SUBSYSTEM
(без множественного числа) и группа изменилась с androiddev
на plugdev
(первого нет в последних системах, второго нет и обычно назначается как минимум первому пользователю).
Кроме того, вам может потребоваться добавить идентификатор поставщика к вашему ~/.android/adb_usb.ini
(по одному идентификатору в строке в шестнадцатеричном представлении):
# ANDROID 3RD PARTY USB VENDOR ID LIST
# 1 USB VENDOR ID PER LINE.
0x2970
Несколько комментариев от нового дистрибутива Linux. Fedora 29 с телефоном Nexus 5X или Nokia 7.1 (Android One).
Сначала отключите телефон, если он уже подключен.
sudo dnf install android-tools
)sudo cp /usr/share/doc/android-tools/51-android.rules /etc/udev/rules.d
)sudo udevadm control --reload-rules
)sudo systemctl restart adb
)Теперь подключите телефон и запустите adb devices
из командной строки. Вы, вероятно, увидите устройство в списке с «нет разрешений». Это хорошо.
ЕСЛИ его нет в списке, вам придется добавить свое устройство в файл правил udev, но для меня протестированные устройства просто работали с предопределенными правилами.
Запустите adb shell
и, надеюсь, вы получите уведомление о безопасности на телефоне с вопросом, хотите ли вы доверять компьютеру, выберите «да».
ЕСЛИ вместо этого ваш компьютер говорит «ошибка: недостаточно прав для устройства», вам нужно убедиться, что на телефоне вы установили свой USB-порт в режим «Передача файлов», а не «Зарядить это устройство». В Android 8.1 это находится в настройках в разделе «Подключенные устройства» > «USB».
Я заметил, что даже если у вас сегодня все работает, то завтра оно может внезапно сломаться без видимой причины. Если это произойдет, сначала проверьте настройку USB-порта на устройстве, которое могло вернуться в режим зарядки, и, если это не удается, отмените авторизацию USB-отладки на устройстве (в настройках в разделе «Параметры разработчика»), и вы, надеюсь, должны получить всплывающее окно. снова вверх, когда вы бежите adb shell
.
Благодаря этому я могу запускать Android Studio и работать на подключенном устройстве.
Я играл с обнюхиванием USB-пакетов с помощью Wireshark и использовал этот modprobe usbmon
модуль. Когда этот модуль загружен, adb больше не работает. В этом случае rmmod usbmon
и adb kill-server
помогает.
jcomeau_ictx
jcomeau@aspire:~$ tail -n 1 /etc/udev/rules.d/99-android.rules SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", MODE="0666", GROUP="plugdev", SYMLINK+="android%n" jcomeau@aspire:~$ cat ~/.android/adb_usb.ini # ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT. # USE 'android update adb' TO GENERATE. # 1 USB VENDOR ID PER LINE. 0x0e8d
мне пришлось проигнорировать совет запуститьandroid update adb
и ввести его вручную, как вы сказали.Иззи
plugdev
вместоandroiddev
). Не проверено, но я бы сказал, что важной частью здесь является то, что это группа вашего пользователя (с которой вы хотите использовать USB).jcomeau_ictx
SUBSYSTEM
вместоSUBSYSTEMS
,ATTR
вместоATTRS
, запятая послеMODE="0666"
не уверен, что все эти изменения были необходимы, но это то, что сработало.Иззи
бишайамс
sudo wget -O /etc/udev/rules.d/51-android.rules
у меня над моим Xiaomi Mi A1 . Конечно, лучше учиться, но хорошо быть ленивым :)Скиппи ле Гран Гуру
udevadm
(см. unix.stackexchange.com/questions/39370/… ).пользователь 25780
lsusb
, затем повторное подключение USB и повторный запускlsusb
не показали никакой разницы. Но, может быть, это потому, что я использую порты USB C?Энди
ATTR{idVendor}=="2970"
на ,51-android.rules
а затем другое правило99-bad.rules
, нацеленное на тот же идентификатор поставщика, последнее может сделать первое неэффективным. Есть на что обратить внимание.Иззи
бишайамс
plugdev
, а НЕandroiddev
, как упоминалось ранее. Не уверен, связано ли это с Android или Linux Mint.Иззи
Жоао Пиментел Феррейра
Иззи
Эндрю Т.