Как настроить доступ 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, но, думаю, сейчас моя проблема связана с корневой учетной записью Ubuntu, которая ведет себя не так, как я ожидал.


Чего я не понимаю, так это следующего:

Это не работает:

martin@alyx:~$ sudo adb devicessudo: 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 devicessudo: adb: command not found

Это работает (как root):

martin@alyx:~$ sudo suroot@alyx:/home/martin# adb devicesList of devices attached CM7-Blade   device

Сейчас я в полном замешательстве, и я был бы признателен за некоторые разъяснения о том, как задать путь для sudo или как еще я мог бы решить свою проблему.

(И, пожалуйста, не говорите, что adb не должен запускаться от имени root.)

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

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

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

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

Пожалуйста, сначала прочтите следующее: Как мне настроить Android ADB?


Настройка доступа по USB

Во-первых, вам не нужны права суперпользователя для запуска ADB, если вы установили соответствующие разрешения. На сайте AOSP приведены примеры для Настройка доступа по USB для устройств Pixel / Nexus. Вы можете использовать следующую схему для устройств, отличных от Nexus:

SUBSYSTEM=="usb", ATTR{idVendor}=="xxxx", ATTR{idProduct}=="xxxx", MODE="0600", OWNER="<username>"

Идентификатор поставщика и продукта можно получить с помощью lsusb и поиск вашего устройства. (Примечание: На самом деле устройство представляет собой Galaxy Nexus.)

$ lsusb | grep -i samsungBus 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) или перезагрузка (рекомендуется).

Обеспечение доступности программ

Вместо изменение переменной path Я бы предложил добавить символическую ссылку на исполняемый файл либо в ~/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 0x22070x<!!!Your Vendor ID here!!!>

Отключенное и повторно подключенное устройство, а также необходимо выполнить следующие команды на терминале;

adb kill-server

а потом

adb start-server

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

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

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

На более новых устройствах вы можете выбрать его непосредственно в настройках разработки, в то время как на более старых он находится в настройках подключения к USB в строке состояния.

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

Выполните следующие действия:

  1. Установить переменные для Android

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

    export ANDROID_HOME=/myPathSdk/android-sdk-linuxexport PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
  2. Перезагрузить

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

    Прослушивание соединения:

    adb -a

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

    cordova run android --device

Я знаю, это кажется вуду, но купите новый высококачественный USB-кабель для передачи данных. Многие кабели предназначены только для зарядки. Я занимаюсь этой проблемой целую вечность, следуя всем предложениям и так далее, С постоянной потерей соединения, и хороший высококачественный USB-кабель для передачи данных изменил ситуацию.

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

martin@alyx:~$ sudo adb devicessudo: adb: command not found

и особенно

martin@alyx:~$ sudo -E adb devicessudo: 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 C отображалось в lsusb, но не в adb devices.

Я перепробовал все решения, такие как 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

Рекомендуемый подход заключается в создании файла по адресу /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

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

Попробуйте выполнить эту команду: sudo tools/android update sdk --no-ui

SDK README:

Добро пожаловать в Android SDK! Архив Android SDK изначально содержит только основные инструменты SDK. Он не содержит платформы Android или каких-либо сторонних библиотек. На самом деле, в нем даже нет всех инструментов, необходимых для разработки приложения. Для того, чтобы начать разработку приложений, вы должны установить Platform-tools и по крайней мере одну версию платформы Android, используя SDK Manager. Platform-tools содержит инструменты сборки, которые периодически обновляются для поддержки новых функций платформы Android (именно поэтому они отделены от базовых инструментов SDK), включая adb, dexdump и другие. Для установки Platform-tools, платформ Android и других дополнений у вас должно быть подключение к Интернету, поэтому, если вы планируете использовать SDK в автономном режиме, пожалуйста, обязательно загрузите необходимые компоненты в режиме Онлайн. Чтобы запустить SDK Manager, пожалуйста, запустите программу "android". Из командной строки вы также можете напрямую запустить обновление, выполнив: tools/android update sdk --no-ui

из документов: Establishing a Build Environment  |  Android Open Source Project

Я заметил, что как в Windows, так и в Ubuntu устройства Android часто не отображаются, если вы подключили их к порту USB 3. Подключение их к порту, отличному от USB3, устраняет проблему.