Ubuntu: отладка устройства Android

У меня есть HTC Desire, который я бы хотел отладить и запустить приложение для Android. Но когда я в Eclipse получает окно, где я могу выбирать между устройствами, мой HTC Desire указан только с вопросительными знаками (????????). Что я делаю неправильно?

Я пробовал это:

Включена отладка USB на моем устройстве и включена отладка в файле Manifest.xml приложения.

В терминале я делаю это:

  • Зарегистрируйтесь как root и создайте этот файл:/etc/udev/rules.d/51-android.rules.
  • SUBSYSTEM == "usb", SYSFS {idVendor} == "0bb4", MODE = "0666"
  • sudo service udev restart

Что еще я мог попробовать или забыл?

Ответ 1

Вам нужно запустить adb вручную, используя sudo. Если вы просто запустите adb без sudo (или если вы разрешите Eclipse/ADT сделать это за вас), у него не будет прав, необходимых для просмотра ваших устройств.

Если он уже запущен, тогда sudo adb kill-server и sudo adb start-server.

Ответ 2

Примечание: принятый ответ EboMike НЕПРАВИЛЬНЫЙ.

Я знаю, что это старый вопрос, но я наткнулся на него, пытаясь решить ту же проблему. Однако принятый ответ был неверным. Не нужно будет запускать adb-сервер как root, как только вы правильно установили правила udev.

Шаг 3 в http://developer.android.com/tools/device.html дает правильное разрешение. В частности, добавьте или измените /etc/udev/rules.d/51-android.rules со следующей строкой:

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0666", GROUP="plugdev" 

В этом случае 0bb4 является идентификатором поставщика для HTC. 0fff - идентификатор продукта для Nexus One. Используйте таблицу в приведенной выше ссылке или lsusb для идентификации идентификатора поставщика устройства и идентификатора продукта. например,

$ lsusb
Bus 001 Device 006: ID 18d1:4e22 Google Inc. Nexus S (debug)

18d1 - идентификатор поставщика данного устройства, а 4e22 - идентификатор продукта. Вы можете оставить определение "ГРУППА", если вы хотите разрешить доступ к этому устройству для всех пользователей. Если нет, обязательно добавьте себя в группу plugdev, если вы еще не в ней. После создания этого файла перезапустите или перезагрузите udev.

udevadm control --reload-rules

Если вам нужно было добавить себя в группу, вам нужно будет выйти из системы и снова войти.

Убейте все старые серверы adb с помощью "adb kill-server", подключите свое устройство и запустите "adb devices". Это перезапустит сервер, и вы должны теперь увидеть свое устройство. Запуск adb как root, даже для запуска сервера adb, не требуется. Это также, как правило, плохая идея запускать вещи как root, если это абсолютно необходимо.

Ответ 3

идентификатор устройства в сообщении adb devices фактически использует серийный номер устройств usb для Android.

Итак, если вы получите пустую строку из серийного номера, она отобразит???????????

В исходном коде сервера adb:

static size_t format_transport(atransport *t, char *buf, size_t bufsize,
                               int long_listing)
{
    const char* serial = t->serial;
    if (!serial || !serial[0])
        serial = "????????????";

Таким образом, может быть, что ваш сервер adb не работает с правами root, или ваши устройства usb не позволяют считывать сервер adb. Простая проверка будет использовать lsusb -v | grep iSerial, чтобы узнать, можете ли вы получить поле iSerial вашего устройства Android.

Кроме того, есть вероятность, что строка iSerial не будет хорошо подготовлена ​​в устройстве. Я видел, что у многих инженерных продуктов нет iSerial вообще, или все устройства отображают один и тот же идентификатор устройства.

Несколько раз драйвер считывает раздел данных во вспышке, который запрограммирован однозначно с устройства на устройство, чтобы сделать его iSerial/id устройства.

Ответ 4

Мне удалось снова запустить мой "кирпичный" Nexus S, выполнив то, что здесь сказано. Однако было необходимо небольшое небольшое дополнение.

Когда вы выполните lsusb, а подсистема USB сообщит вам, какое Android-устройство подключено, мое письмо вернуло меня:

$ lsusb
Bus 001 Device 006: ID 18d1:d001 Google Inc.

Обратите внимание на d001, а не на любое из известных состояний, то есть 4e20, 4e21 или 4e22. Так что я сделал, это добавить еще одну строку в 51-android.rules специально с этим неизвестным состоянием и пометить ее как "восстановление/отладка".

Отключите и снова подключите Android. Еще раз проверьте lsusb, чтобы убедиться, что он, по крайней мере, замечен. И... Это дало мне это

$ adb devices
List of devices attached
34353601BB2000EC    recovery

вместо этого

$ adb devices -l
List of devices attached 
????????????           no permissions usb:1-3

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

Ответ 5

Это связано с тем, что вы не дали своему adb разрешение на доступ к вашему оборудованию. У вас есть два решения:

временный → убить все существующие процессы adb и перезагрузить с помощью суперпользователя

ps -ef | grep adb | awk '{print $2}' | xargs kill

sudo adb server-restart

или

sudo <your android SDK path>/platform-tools/adb server-restart

постоянный → добавьте свои устройства в список udev Добавьте следующую строку в свой /etc/udev/rules.d/51-android.rules как root с правильным idVendor, используя этот список.

SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"

а затем следующая команда:

chmod a+r /etc/udev/rules.d/51-android.rules

Если adb не работает, выполните следующие действия:

sudo ln -s <your android SDK path>/platform-tools/adb /usr/local/sbin/adb

Ответ 6

Убедитесь, что вы установили sudo apt-get install android-tools-adb Теперь проверьте sudo adb Он покажет помощь adb

Теперь, пожалуйста, удалите/запустите adb, используя следующие команды -

sudo adb kill-server sudo adb start-server

Наконец, устройства sudo adb

Надеюсь, это сработает!!!