adb可以列出设备,但adb shell/logcat无法工作。

19

简短版

adb devices 可以列出设备,但 adb shelladb 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 guest。主机是windows 7。

非常感谢任何帮助或提示。

更新

将手机插入后置的USB端口后,它突然开始工作!但我不确定问题是否真正解决。会再看看。


1
“Full_AOSP_on_Toroplus”听起来像是一个售后固件版本 - 这可能会对手机固件造成问题吗?您能否从此计算机与其他设备通信,或者从其他计算机与此手机通信? - Chris Stratton
1
@ChrisStratton:是的,这是一个定制的ROM。它在我的办公室PC上原生运行Ubuntu时表现良好。只是在vmplayer中运行Ubuntu时无法工作。所以我猜测这与vmplay的USB配置有关。 - Jinghao Shi
我曾经遇到过同样的问题。将手机插入后面的一个USB端口后,它也可以正常工作。这是为了确认您的解决方案有效。 - Tarik
NAA但可能有帮助:在Windows上,我在cygwin中遇到了同样的问题,但在cmd中可以工作。 - lucidbrot
7个回答

6

我曾经遇到过adb shell卡住的问题。我在Ubuntu主机上运行一个Ubuntu 12.04虚拟机。对我来说,问题出在VM的USB兼容性设置上,它被设置为1.1,但需要至少2.0版本。要更改此设置,请关闭虚拟机并在VMPlayer启动菜单中选择“编辑虚拟机设置”。然后选择“USB控制器”设备并将“USB兼容性”更改为USB 2.0。


2

我曾经遇到过同样的问题,尝试在电脑上不同的USB端口连接设备,但总是得到不同的结果(虽然都无法正常工作)。最终,我决定去商店购买一条新的USB线缆。现在一切都运行得非常顺畅!我猜想,USB线缆可能会磨损或者出现故障...

简而言之:购买一条新的线缆!对我很有效!


2

我不确定这是否是正确的使用方式,但我也遇到了adb shell挂起的情况。然而,运行echo my_command | adb shell命令可以让我在目标设备上执行指令。

例如:echo settings get secure sysui_qs_tiles | adb shell

此外,adb shell < /dev/stdin也可能是一个有趣的选项。


0
在我的情况下,我使用以下命令设置了TCP端口转发:adb forward tcp:4321 tcp:4321,之后我不知道怎么搞的导致连接出了问题。
此后每次执行adb shell命令都会一直挂起。然后我运行了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又回来了。


0
对于我的VMWare组合(Windows 10主机+Ubuntu 18客户机+Galaxy S9),在将USB兼容性更改为1.1后,它实际上可以正常工作。不知道为什么,但如果您遇到此问题,值得一试。

-1
我注意到如果我先将 USB 插入我的 Mac,然后再插入 Android,adb 就可以工作。 也许这就是为什么人们会注意到不同的电缆起作用的原因?(发生在以不同的顺序连接/断开电缆时)

-1

我曾经遇到过同样的问题。我只是拔掉了连接到第二个USB端口的鼠标USB电缆,并将手机电缆连接到那个(第二个USB端口)。它奏效了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接