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 работает. Возможно, именно поэтому люди замечают, что работают разные кабели? (Бывает подключать / отключать кабели в другом порядке)