Как настроить доступ ADB для устройств Android?
Я использую Ubuntu 12.10, и я установил Android SDK, установите его путь в моем пользователе .bashrc
и это работает.
Проблема в том, что мой телефон требует, чтобы adb запускался root для разрешений, но при запуске adb с sudo я получаю следующую ошибку:
sudo: adb: команда не найдена
Я пытался просто использовать sudo -E adb start-server
, но это не работает. Пытался добавить строку пути экспорта в /root/.bashrc
и (после осознания того, что это не помогло) /etc/bash.bashrc
,
Я помню, что мог установить его на моем Arch Linux, но я думаю, что моя проблема сейчас связана с учетной записью root Ubuntu, которая ведет себя не так, как я ожидал.
Что я не понимаю, так это следующее:
Это не работает:
martin@alyx:~$ sudo adb devices
sudo: adb: command not found
Это делает (набрав полный путь):
martin@alyx:~$ sudo /opt/android-sdk-linux/platform-tools/adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
CM7-Blade device
Это не работает (используя -E с sudo):
martin@alyx:~$ sudo -E adb devices
sudo: adb: command not found
Это работает (как root):
martin@alyx:~$ sudo su
root@alyx:/home/martin# adb devices
List of devices attached
CM7-Blade device
Сейчас я полностью сбит с толку, и я был бы признателен за разъяснения о том, как задать путь для sudo или как еще я мог бы решить мою проблему.
(И, пожалуйста, не говорите, что adb не должен запускаться с правами root.)
Заранее спасибо!
Редактировать: Требуя корневые разрешения, я имею в виду, что они мне нужны, потому что в противном случае я получаю:
$ adb devices
List of devices attached
???????????? no permissions
который не является суперпользователем. Извините, если это было недоразумение.
9 ответов
Сначала прочтите следующее: Как настроить Android ADB?
Настройка доступа через USB
Во-первых, вам не нужны root-права для запуска ADB, если вы настроили соответствующие разрешения. На сайте AOSP приведены примеры настройки USB-доступа для устройств Pixel/Nexus. Вы можете использовать следующую схему для устройств не Nexus:
SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="xxxx", MODE="0600", OWNER="<username>"
Поставщик и идентификатор продукта можно получить с помощью lsusb
и поиск вашего устройства. (Примечание: устройство на самом деле является Galaxy Nexus.)
$ lsusb | grep -i samsung
Bus 002 Device 103: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II]
Так что мой /etc/udev/rules.d/51-android.rules
Правило udev выглядит так:
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="username"
Вы можете повторить это для других состояний телефона, таких как fastboot, если это необходимо. Чтобы изменения вступили в силу, перезагрузите udev (sudo udevadm control --reload
) или перезагрузите компьютер (рекомендуется).
Обеспечение доступности программ
Вместо изменения переменной пути я бы предложил добавить символическую ссылку на исполняемый файл либо в ~/bin/
(только для пользователя) или в /usr/local/bin/
(общесистемный).
mkdir ~/bin/
ln -s /opt/android-sdk-linux/platform-tools/adb ~/bin/
Я столкнулся с той же проблемой с планшетом из Китая (какой-то странный производитель).
В дополнение к /etc/udev/rules.d/51-android.rules
файл, мне нужно было изменить ~/.android/adb_usb.ini
также.
Запустите ниже на терминале;
sudo gedit ~/.android/adb_usb.ini
и ваш 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.
# ie 0x2207
0x<!!!Your Vendor ID here!!!>
Отключенное и повторно подключенное устройство, а также необходимое для запуска нижеуказанных команд на терминале;
adb kill-server
и после
adb start-server
И устройство было обнаружено.
В моем случае вместо режима MTP некоторые смартфоны нужно было просто установить в режим PTP, в отличие от большинства устройств, которым требуется, чтобы режим MTP был обнаружен моей Android Studio (v1.5.1).
Поэтому обязательно сначала попробуйте оба режима MTP и PTP, не тратя время на более сложную настройку ADP в Unix и, возможно, нанося им вред.
В более новых устройствах вы можете выбрать его непосредственно в настройках Dev, в то время как в более старых - в параметрах USB Connected в строке состояния.
Но и для меня новейшие устройства Sony Xperia от Z5 и выше не будут работать независимо от режима USB. Может быть, моя Android Studio устарела или мне нужно копать также с конфигурациями Unix ADP.
Следуй этим шагам:
Установить Android Vars
Сначала зайдите к себе домой и нажмите Ctrl + H, он покажет вам скрытые файлы, теперь ищите
.bashrc
файл, откройте его с помощью любого текстового редактора, затем поместите строки ниже в конце файла:export ANDROID_HOME=/myPathSdk/android-sdk-linux export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
перезагружать
Использование устройства для отладки
Слушайте для связи:
adb -a
Подключите ваше устройство Android и авторизуйте его:
cordova run android --device
Хотя принятый ответ помог мне добиться цели, я все еще не понимал:
martin@alyx:~$ sudo adb devices
sudo: adb: command not found
и особенно
martin@alyx:~$ sudo -E adb devices
sudo: adb: command not found
поскольку согласно sudo --help
:
-E, --preserve-env preserve user environment when running command
Оказывается, что во многих дистрибутивах Linux (включая Debian и Ubuntu) secure_path
а также env_reset
опции включены по умолчанию, которые сбрасывают PATH
переменная и установите его в secure_path
, Вы можете изменить его в /etc/sudoers
файл с помощью Visudo.
В качестве альтернативы вы можете запустить:
sudo env PATH=$PATH adb devices
Настройка доступа через USB
Рекомендуемый подход заключается в создании файла в /etc/udev/rules.d/51-android.rules
,
Пожалуйста, введите в Терминале:
wget -S -O - http://source.android.com/source/51-android.txt | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules
Эти новые правила вступают в силу при следующем подключении устройства. Поэтому может потребоваться отключить устройство и снова подключить его к компьютеру.
Я лично столкнулся с проблемой, когда мое устройство с портом USB C отображалось в lsusb, но не в устройствах adb.
Я пробовал все решения, такие как adb kill-server, настройку
/etc/udev/rules.d/51-android.rules
файл,
~/.android/adb_usb.ini
файл, установив правила adb https://github.com/M0Rf30/android-udev-rules и перезапустив, но ничего не помогло.
Что, наконец, сработало, так это подключение устройства к порту USB2.0. У меня был новый рабочий стол, поэтому большинство портов были USB3.0.
Я знаю, что это кажется колдовством, но купите новый высококачественный USB-кабель для передачи данных . Многие кабели предназначены только для зарядки. Я сталкиваюсь с этой проблемой целую вечность, следуя всем предложениям и т. Д., С постоянными потерями соединения, и хороший высококачественный USB-кабель для передачи данных имел значение.
Попробуйте эту команду: sudo tools/android update sdk --no-ui
SDK README:
Добро пожаловать в Android SDK! Архив Android SDK изначально содержит только основные инструменты SDK. Он не содержит платформу Android или сторонние библиотеки. На самом деле, он даже не имеет всех инструментов, необходимых для разработки приложения. Чтобы начать разработку приложений, вы должны установить инструменты Platform и хотя бы одну версию платформы Android, используя SDK Manager. Platform-tools содержит инструменты сборки, которые периодически обновляются для поддержки новых функций на платформе Android (поэтому они отделены от базовых инструментов SDK), включая adb, dexdump и другие. Для установки Platform-tools, платформ Android и других надстроек у вас должно быть подключение к Интернету, поэтому, если вы планируете использовать SDK в автономном режиме, обязательно загрузите необходимые компоненты в режиме онлайн. Для запуска SDK Manager, пожалуйста, запустите программу "Android". Из командной строки вы также можете напрямую запустить обновление, выполнив:
tools/android update sdk --no-ui