Android-планшет i.onik без имени не распознается adb — устройства adb пусты

Я следовал различным инструкциям и, наконец, смог подключить свой ZTE Blade к ноутбуку Ubuntu для отладки по USB. Такая же настройка не работает при обмене телефона на свой "безымянный" планшет i.onik TP10.1-1500DC.

Я пробовал разные кабели и разные порты USB. Нужен ли специальный кабель для подключения планшета для отладки по USB?

Это то, что я получаю из корневой оболочки:

~# adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 

~#

(Я знаю, что должна быть возможность запуска adbбез полномочий root, но этот тест должен был исключить ошибки прав доступа.)

Вывод lsusbявляется специальным для этого устройства, текстовое описание не отображается. Первая запись ниже с другого устройства, вторая запись с планшета. Я проверил это, запустив lsusbс подключенным планшетом и без него:

Bus 002 Device 005: ID 10d5:5000 Uni Class Technology Co., Ltd 
Bus 002 Device 009: ID 2207:0010  

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

Любые дополнительные подсказки?

Возможно, вы захотите проверить настройку ADB для Nexus 4 в Ubuntu 11.10 . Возможно, вы пропустили шаг, чтобы сделать ваше устройство известным :)
@Izzy: добавление идентификатора производителя в adb_usb.iniфайл сразу решило проблему. Большое спасибо! Хотите написать ответ, чтобы я мог его принять?
Конечно, только что сделал это. Поскольку у нас уже есть подробности в связанном вопросе, я оставил его более общим. Рад, что все так легко решилось, но, с другой стороны, именно этого я и ожидал :) Наслаждайтесь! // Кстати, для упрощения настройки других машин вас также может заинтересовать Существует ли минимальная установка ADB? -- что, в конце концов, убедило меня сделать это: просто скопируйте несколько файлов, и все готово. Нет необходимости во всем SDK, если вы не разработчик :)
@Izzy: В Ubuntu я могу установить adbс помощью apt-get install android-tools-adb. Нет необходимости когда-либо копировать файлы или изменять PATHнастройки. Сам пакет крошечный и содержит только adbпару необходимых файлов.
Я знаю об этом (так как я тоже использую Ubuntu). Но я также слышал, что он несет в себе кучу зависимостей, поэтому я прибегнул к «варианту копирования». Здесь исполняемые файлы компилируются статически, поэтому они всегда работают независимо от дистрибутива.
@Izzy: Правильно, зависимость от zlib1g сломает libxml2 и texlive-binary. Хм... Тяжело.
Видеть? Там это начинается. Таким образом, вместо того, чтобы возиться с хитрыми зависимостями, чтобы исправить «простую установку apt-get», в конце концов оказывается намного проще загрузить и распаковать файл вручную :)
@Izzy: Подожди, я ошибся. Это только сломает libxml2 или texlive-binary, если эти пакеты очень старые. На практике я всегда буду использовать этот aptподход, если только установка не попытается удалить половину моей системы, но здесь это не так. В любом случае, оба метода получения файлов действительны и работают большую часть времени :-)

Ответы (3)

Ответ Иззи вводит в заблуждение. Были перепутаны две несвязанные вещи (список идентификаторов поставщиков в adb с одной стороны и настройка разрешений в Linux с другой).

1) устройства, рассматриваемые adb:

У Adb есть жестко закодированный список идентификаторов поставщиков USB, которые он пытается использовать. Например, мобильные телефоны HTC используют 0xbb4, который указан ( исходный файл usb_vendors.c ), а 0x2207 — нет.

Единственный способ добавить в этот список (без исправления исходного кода) — поместить идентификаторы поставщиков в файл $HOME/.android/adb_usb.ini, строка за строкой. (HOME настроен правильно?)

Специальный кабель не требуется.

2) настройка разрешений для доступа без полномочий root:

udev-fiddling должен предоставить пользователю доступ, например, к /dev/bus/usb/002/009 (изменение номера шины/номера устройства; см. lsusbтекущие значения).

Подробности этого не имеют отношения к вопросу исходного постера, так как он запускал adb как root.

Как описано в разделе «Настройка ADB для Nexus 4 в Ubuntu 11.10 », в Linux важно, чтобы он был указан либо в ~/.android/adb_usb.ini(на основе пользователя), либо в /etc/udev/rules.d/51-android.rules. Синтаксис для обоих файлов различается: если в первом случае достаточно просто добавить идентификатор поставщика ( echo 0x18d1 >> ~/.android/adb_usb.iniдля Nexus 4), запись для правила UDEV немного сложнее. Подробности можно найти в связанном вопросе (точнее, его ответах).

В случае с krlmlr это не было "или-или", но, похоже, были необходимы обе части (у меня никогда не было этого раньше, и я даже никогда не использовал adb_usb.ini- но это не значит, что таких исключений нет). Добавив устройство в обоих местах (что в любом случае не помешает), устройство наконец появилось.

Два дополнительных замечания: после изменения правил UDEV необходимо перезапустить службу UDEV, чтобы изменения вступили в силу. В Ubuntu это можно сделать через sudo service udev restart(в качестве альтернативы вы можете просто заставить UDEV перезагрузить свои правила с помощью udevadm control --reload-rules). Если ваше устройство по-прежнему не обнаружено, скорее всего, оно было подключено, когда вы вносили изменения; вам нужно отключить и снова подключить USB-кабель. Разумеется, на вашем устройстве должна быть включена отладка по USB :)

Пример

автор: krlmlr

На основе следующего вывода lsusbдля рассматриваемого устройства Android:

Bus 002 Device 009: ID 2207:0010  

нужно было создать /etc/udev/rules.d/51-android.rulesas rootсо следующим содержимым:

SUBSYSTEM=="usb", ATTR{idVendor}=="2207", ATTR{idProduct}=="0010", MODE="0660", GROUP="plugdev"

и создать ~/.android/adb_usb.iniсо следующим содержимым:

0x2207

Первый необходим, чтобы разрешить обычным пользователям (входящим в группу plugdev) доступ к устройству. Обратите внимание на маску разрешений 0660вместо часто встречающейся 0666, которая слабее с точки зрения безопасности (последняя разрешает «мировой» доступ, а первая разрешает доступ только «пользователям и группам»). Второй требуется для того, чтобы adbпопытки поговорить с устройством в первую очередь. После того:

sudo chmod a+r /etc/udev/rules.d/51-android.rules
sudo udevadm control --reload-rules
adb kill-server

и отключите + подключите ваше устройство Android. Затем,

adb devices

наконец-то показали Android-устройство.

Примечание Иззи:

Для моего LG Optimus 4X HD было достаточно добавить одну строку /etc/udev/rules.d/51-android.rules:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="1004", ATTRS{idProduct}=="61a6", MODE="0666" GROUP="androiddev", SYMLINK+="android%n"

Возможно, эта SYMLINKопция имеет значение, потому что мне не нужна дополнительная запись в ~/.android/adb_usb.ini.

Обратите внимание, что я уже добавил свой планшет в файл в формате rules.d. Насколько я понимаю, мне нужно было сделать и то, и другое: настройка в .iniфайле требуется для «безымянных» устройств, о которых adbне известно, что они работают под управлением Android, а rules.dнастройка требуется для доступа к устройству без rootпривилегий.
Я никогда не добавлял устройство в этот ini-файл, всегда только в файл правил UDEV. Может вы что-то упустили при этом? Насколько мне известно, достаточно одного из двух вариантов. В моем случае часть UDEV работает нормально, и я читал много отчетов, где вариант с ini-файлом делал это без каких-либо специальных настроек UDEV.
Нет, после вашего комментария единственное, что я сделал, это пропатчил .iniфайл, и он работал даже без перезагрузки udev, как обычный пользователь. (Правда, мне пришлось перезапустить adbсервер.) Я уже добавил устройство в правила, но безрезультатно. Эту конкретную информацию о .iniфайле очень сложно найти, давайте создадим вопросы и ответы, которые, наконец, разберутся во всем :-)
Попробуйте удалить (или закомментировать) изменения в UDEV, перезапустите службу UDEV, и вы обнаружите, что она все еще работает. И я согласен с вами: я тоже был удивлен, прочитав о решении для файлов Ini. Что касается вашего предложения вопросов и ответов: просто проверьте вики-тег ADB :)
Нет, это не так. Мне нужны и правила, и .ini. Действительно. Я только что проверил все комбинации. Более того, как вы правильно сказали, он .iniдолжен находиться в доме соответствующего пользователя, поэтому, если вы собираетесь работать adbот имени root, вы должны добавить его в rootкаталог .android.
Возможно, одна тонкая деталь: чтобы измененные правила udev вступили в силу, вы должны перезапустить udev(или запустить udevadm control --reload-rules) и отключить + подключить ваше USB-устройство.
ОК - снова узнал что-то новое: бывают случаи, когда необходимо и то, и другое. Никогда раньше такого не было. И да, хороший намек на "перезапустить и отключить/подключить", я могу это подтвердить.
Правила не нужны, если вы запускаете adbкак rootи (при необходимости) имеете каталог adb_usb.iniin root. .androidТолько что тоже проверил.
Значит, этот ответ для вас больше неприемлем? Должен ли я интегрировать некоторые комментарии? :)
Ваш намек был решающим и помог мне решить мою проблему. Но пока ответ неточен, и было бы здорово, если бы он включал в себя суть наших выводов для последующего использования, особенно в отношении разницы между ini и rules.
Вы изложили свою точку зрения - и я внес свое редактирование :) Полный доступ, чтобы собрать важную информацию из комментариев и включить ее в сам ответ - это то, что я также много раз поощряю, поскольку никто не просматривает все комментарии. (особенно когда их так много).
Я добавил пример с фактическим содержимым файла, который показывает, как я заставил это летать.
Нет, SYMLINKвариант не помог, .iniфайл все равно нужен.

Попробуйте отредактировать adb_usb.ini и добавить идентификатор вашего устройства, вы можете найти его, перейдя в диспетчер устройств, найдите «Android ADB Interface», дважды щелкните его, перейдите на вкладку сведений и в раскрывающемся меню «Свойства» выберите «Оборудование». Ids» в поле под ним с надписью «Значения». Вы должны увидеть что-то вроде «USB\VID_2207&PID_0010&MI_01». Числа могут отличаться в зависимости от идентификатора поставщика вашего устройства, например, мой идентификатор поставщика «2207». Не открывайте файл adb_usb.ini, расположенный на папки ниже и добавьте идентификатор вашего устройства в шестнадцатеричном формате

например, идентификатор моего устройства "2207", я поставлю его там как "0x2207"

Обычно он находится в

  1. XP: \Documents and Settings.android\
  2. Windows 7: \Users.android\
  3. Windows 7: \Users.android\

Но если папка не существует, попробуйте создать ее с помощью cmd. И если файл adb_usb.ini также не существует, вы можете создать его с помощью блокнота и вставить только идентификатор вашего устройства и сохранить его в папке .android.