adb может перечислять устройства, но adb shell/logcat не работает

Укороченная версия

adb devices могу перечислить устройство, но adb shell или же adb logcat просто повесить и не работать.

Длинная версия

Вот различные выходные данные команды.

/* system info */
$ uname -a
Linux ubuntu-vm 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64    x86_64 GNU/Linux

/* udev info */
$ cat /etc/udev/rules.d/51-android.rules 
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev" 

$ lsusb
Bus 001 Device 003: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II], GT-P7500 [Galaxy Tab 10.1]
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub



$ adb devices -l
List of devices attached 
0A3C294805017006       device usb:1-1 product:full_toroplus model:Full_AOSP_on_Toroplus device:toroplus

$ adb shell
/* no output, just hang */

$ adb logcat
/* no output either */

/* verbose mode */
$ ADB_TARCE=1 adb shell
system/core/adb/adb.c::main():Handling commandline()
system/core/adb/commandline.c::adb_commandline():starting interactive shell
system/core/adb/adb_client.c::_adb_connect():_adb_connect: host:version
..........
4f4b4159 OKAY
system/core/adb/adb_client.c::switch_socket_transport():Switch transport success
system/core/adb/transport.c::writex():writex: fd=3 len=4: 30303036 0006
system/core/adb/transport.c::writex():writex: fd=3 len=6: 7368656c6c3a shell:
system/core/adb/transport.c::readx():readx: fd=3 wanted=4
/* hang at this point */

Похоже, что сервер adb ожидает каких-то данных с телефона, но не может их получить, поэтому он застрял там.

Я пробовал:

  • убить и перезапустить сервер ADB
  • отключите, а затем подключите телефон
  • перезагрузить телефон
  • отключить отладку USB на телефоне, а затем включить его

Иногда, после отключения / подключения телефона, он будет работать некоторое время (я могу сделать adb shell), но вскоре он перестает работать. И в большинстве случаев отключение / подключение телефона даже не имеет никакого эффекта!

Я использую Ubuntu в качестве гостя vmplayer. Хост Windows 7.

Заранее спасибо за любую помощь или подсказки.

ОБНОВИТЬ

После подключения телефона в задний порт USB, он вдруг работает! Но я не уверен, что проблема действительно решена. Увидим.

7 ответов

У меня была точно такая же проблема с зависанием оболочки adb. Я использую гостевую виртуальную машину Ubuntu 12.04 на хосте Ubuntu. Проблема для меня заключалась в том, что настройка совместимости USB для виртуальной машины была установлена ​​на 1.1, она должна быть не ниже 2.0. Чтобы изменить настройки выключения виртуальной машины и выбрать "Изменить настройки виртуальной машины" в меню запуска VMPlayer. Затем выберите устройство "USB Controller" и измените "Совместимость USB" на USB 2.0.

Не уверен, что это должно быть использовано таким образом, но у меня также есть adb shell висит, однако работает echo my_command | adb shell позволил мне запускать команды на цель.

Например echo settings get secure sysui_qs_tiles | adb shell

Также, adb shell < /dev/stdin может быть интересно.

У меня была та же проблема, получая разные результаты (хотя ни один из них не работал хорошо), пробуя разные usb-порты на компьютере. Я наконец решил пойти в магазин и купить новый USB-кабель. Теперь это работает без нареканий! Я думаю, USB-кабели могут быть изношены или плохо...

Короткая история: купи новый кабель! Работал на меня!

В моем случае у меня была настройка переадресации портов tcp с помощью этой команды adb forward tcp:4321 tcp:4321а позже я как-то испортил соединение.

Каждый раз после этого зависал навсегда. Потом я побежал ps aux | grep adbи нашел это

      ❯ ps aux | grep adb
username          10319   2.4  0.0  4380992   3080   ??  Ss   12:41PM   5:40.20 adb -L tcp:5037 fork-server server --reply-fd 4
username          34406   0.0  0.0  4278688    776 s007  S+    3:51PM   0:00.01 grep --color=auto  --exclude-dir=.tox adb

Поэтому я убил запущенный процесс с помощью kill 10319и вуаля... adb shellснова вернулся.

Для моей комбинации VMWare (Windows 10 Host + Ubuntu 18 Guest + Galaxy S9) она действительно работала после изменения совместимости USB на 1.1. Не знаю почему, но стоит попробовать, если у вас есть эта проблема.

У меня такая же проблема. Я просто отключил USB-кабель мыши, подключенный ко второму USB-порту, и подключил к нему телефонный кабель (второй USB-порт). Это сработало!

Я заметил, что если я сначала подключу usb к своему mac, то подключу его к android, adb работает. Возможно, именно поэтому люди замечают, что работают разные кабели? (Бывает подключать / отключать кабели в другом порядке)

Другие вопросы по тегам