it-swarm.com.ru

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. Судо сервис удев перезагрузка

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

24
Poku

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

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

49
EboMike

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

44
gnac

идентификатор устройства в комманде 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 не работает с правами суперпользователя, или ваши usb-устройства не позволяют серверу adb читать. Простая проверка будет использовать lsusb -v | grep iSerial, чтобы узнать, сможете ли вы получить поле iSerial на вашем Android-устройстве.

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

Иногда драйвер считывает раздел данных во флэш-памяти, который однозначно запрограммирован от устройства к устройству, чтобы сделать его идентификатором iSerial/device.

3
Rocky Zhang

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

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

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

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

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

$ adb devices
List of devices attached
34353601BB2000EC    recovery

вместо этого

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

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

2
Dreamszz

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

constant -> добавьте ваши устройства в список 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
1
shashini dilrukshi

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

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

Sudo adb kill-server Sudo adb start-сервер

И, наконец, Sudo ADB устройства

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

0
Nikhil Raut