Как настроить доступ ADB для устройств Android?

39

Я использую 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.)

Заранее спасибо!

Редактировать: Требуя права root, я имею в виду, что они мне нужны, потому что в противном случае я получаю

$ adb devices 
List of devices attached 
????????????    no permissions

который не является суперпользователем. Извините, если это было недоразумение.

Мартин Фейес
источник
Я заметил, что как в Windows, так и в Ubuntu устройства Android часто не появляются, если они подключены к порту USB 3, а подключение к порту не USB3 облегчает проблему.
Пол Грегуар
из документов: source.android.com/source/…
Пасхалис

Ответы:

48

Сначала прочтите следующее: Как настроить 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/
LiveWireBT
источник
1
Я попытался добавить правила udev для своего телефона, но это не помогло, поэтому я подумал, что, возможно, я не совсем понял свою проблему. Пожалуйста, если у вас есть время, посмотрите конец моего вопроса.
Мартин Фейес
Вы добавили правильные идентификаторы? modaco.com/topic/329317-guide-ubuntu-and-the-blade После перезагрузки вашей машины? adb devicesу меня работает без рут прав.
LiveWireBT
4
Ууу, это работает! Я добавил правила udev в /etc/udev/rules.d/51-android-rules и, очевидно, это была ошибка. После использования /lib/udev/rules.d/11-android.rules все было хорошо! Мне не нужны права доступа root Большое спасибо!
Мартин Фейес
Был ли тот же ???????????? Нет разрешения ситуации и ваш ответ решил ее, спасибо.
Panthro
по какой-то причине это не сработало, мне пришлось запустить сервер adb с помощью sudo; Любая идея, где я мог бы посмотреть, почему это не сработало?
Водолей Сила
29

Я столкнулся с той же проблемой с планшетом из Китая (какой-то странный производитель).

В дополнение к /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

И устройство было обнаружено.

Уйгар у
источник
Я тоже попробовал с вашим советом, но ничего не изменилось, есть идеи, где я мог бы посмотреть, почему это не сработало?
Водолей Сила
Хороший. Это сработало для меня. Наряду с этим мне пришлось обновить мой adb .
Сумасшедший арахис
Это решение не работает в Ubuntu 14.04. Список устройств все еще выходит пустым.
Луис де Соуза
1
Большое спасибо, Уйгар, наконец-то я нашел решение, которое работает для меня.
Дмитрий Попов
Вот чего мне не хватало. На самом деле 0x2207в вашем примере используется тот же идентификатор поставщика, что и мое устройство.
Ssokolow
2

В моем случае вместо режима MTP некоторые смартфоны нужно было просто установить в режим PTP, в отличие от большинства устройств, которым требуется, чтобы режим MTP был обнаружен моей Android Studio (v1.5.1).

Поэтому обязательно сначала попробуйте оба режима MTP и PTP, не тратя время на более сложную настройку ADP в Unix и, возможно, нанося им вред.

В более новых устройствах вы можете выбрать его непосредственно в настройках Dev, в то время как в более старых - в параметрах USB Connected в строке состояния.

Но и для меня новейшие устройства Sony Xperia от Z5 и выше не будут работать независимо от режима USB. Может быть, моя Android Studio устарела или мне нужно копать также с конфигурациями Unix ADP.

Джордж Гудпортер
источник
1

Следуй этим шагам:

  1. Установить Android Vars

    Сначала зайдите к себе домой и нажмите Ctrl+, Hэто покажет вам скрытые файлы, теперь ищите .bashrcфайл, откройте его в любом текстовом редакторе, а затем поместите строки ниже в конце файла:

    export ANDROID_HOME=/myPathSdk/android-sdk-linux
    export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
    
  2. перезагружать

  3. Использование устройства для отладки

    Слушайте для связи:

    adb -a
    

    Подключите ваше устройство Android и авторизуйте его:

    cordova run android --device
    
Владимир Тамайо
источник
0

Настройка доступа через 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

Эти новые правила вступают в силу при следующем подключении устройства. Поэтому может потребоваться отключить устройство и снова подключить его к компьютеру.

Бенни
источник
0

Хотя принятый ответ помог мне добиться цели, я все еще не понимал:

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
maxnorbi
источник
-1

Попробуйте эту команду: 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

user121040
источник
Я не уверен, что это отвечает на оригинальный вопрос ...
Landroni