Как настроить доступ 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.

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

  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
    

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

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

Другие вопросы по тегам