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

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

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

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

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

  1. Войдите в систему под учетной записью root и создайте этот файл: /etc/udev/rules.d/51-android.rules.
  2. SUBSYSTEM == "usb", SYSFS {idVendor} == "0bb4", MODE = "0666"
  3. Sudo service udev restart

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

Solutions Collecting From Web of "Ubuntu: отладка устройства Android"

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

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

Примечание. Принимаемый ответ 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, если это абсолютно необходимо.

Идентификатор adb devices коммуникационных 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 устройства.

Мне удалось снова запустить мой «кирпичный» 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 

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

Это связано с тем, что вы не дали своему 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 

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

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

Sudo adb kill-server sudo adb start-server

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

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