一段时间后,Adb停止检测我的手机

16
我在 Linux 机器上为 Android 开发,已经创建了一个针对 Android 的 udev 规则并且它有效。但是,如果我一段时间后拔掉并重新插入设备,当我运行 lusb 或 dmesg 命令来获取设备信息时,adb 就无法识别该设备。我尝试重新加载 udev 规则,但这并没有起作用。我甚至尝试关闭 adb 进程,但还是无法解决问题。
有谁能帮忙吗? 不管怎样,谢谢。
9个回答

9
这似乎是Linux上的一个真实问题,某个时刻设备将不再被ADB所识别。我应该说几乎永远不会被ADB所察觉。在我的情况下,我有一台Samsung Galaxy Tab 10.1,它是赠送给2011年Google I/O参会者的。我的Ubuntu 10.10开发系统与这个设备完全协作良好。但是,在9月19日左右,ADB停止检测到该设备!实际上,在某些短暂的时刻,设备已被ADB检测到。需要明确的是,我和Pharaoh遇到的问题并不是执行 $ adb devices 后设备返回“??????????”,而是设备根本没有出现在列表中。还有一件重要的事情是,这个设备在我的基于Windows的开发机上从未未被检测过。我认为,ADB用于确定USB上的设备是否为adb_device的机制很脆弱,我们设备或开发系统中的某些变化破坏了这种检测。

1
FYI,这种情况在Windows上也经常发生。ADB报告各种错误 - 设备断开连接,连接关闭等等。我的解决方案:拔掉设备并重新插入,然后在Eclipse的设备视图中重新启动ADB。在大多数情况下,这可以解决问题(持续一个小时左右)。 - Pointer Null
1
如果出现返回???????????,则需要添加udev规则,问题是一段时间后完全丢失。 - logcat
天啊 - 我也刚开始遇到这个问题。唉。而且在 Linux 下使用 Eclipse 构建我们的项目比在 Windows 下要快得多,所以 Linux 看起来很有前途。 - Andy Weinstein

4

我通常会因为在Chrome中安装了adb插件而遇到这个问题。 如果我关闭Chrome并重新连接设备,则会出现adb列表中的设备。希望这可以帮助解决问题。


这对我有用!关闭Chrome后,adb立即检测到设备,无需重新启动。我遇到了这个问题一段时间,我不知道是Chrome引起的.. FYI我在Fedora上。 - conor
这也是我的情况。结束Chrome进程后,ADB找到了设备。我的Chrome没有ADB插件,但我还不确定,但我认为当您在“chrome:// inspect”选项卡中取消选中“发现USB设备”时,问题停止发生。 - Mario

4

由于某些原因,有时adb会断开连接,因此在这种情况下,您需要重新启动 adb。

转到DDMS->设备,您将在查看菜单中的重置adb选项旁边看到屏幕截图选项。

enter image description here


3
我也曾遇到过这个问题,我的手机是 OnePlus 2。
前一天还能正常使用,我使用 Chrome DevTools 中的“设备检查器”对端口进行了转发设置。需要保持该对话框一直开启才能正常工作,因此我将其保持在一个标签页中并一直开着。
第二天当我通过 USB 连接设备时,adb devices 没有列出任何内容。我关闭了 devtools 中的设备检查器对话框,然后 adb 又能识别我的设备了。之后我重新启用了端口转发,但仍然能够检测到我的设备。
简而言之:如果你已经移除了设备,请关闭 Chrome DevTools 中的端口转发对话框。

2

我以前也遇到过这种情况。我会在手机上禁用,然后重新启用调试(设置 -> 应用程序 -> 开发 -> USB调试,取消选中,然后重新选中),以便再次通过adb识别它。


1
不是那样工作的。我已经尝试过了。期待新的答案版本。 - logcat
你能在另一台电脑上实现吗?或者用另一部手机?这可能是USB问题的组合。 - Greyson
另外,我注意到如果我让我的Nexus S在连接时进入睡眠状态,它会关闭USB;虽然这可能与此无关。 - Greyson
这只涉及Linux系统,我的经验仅限于Gingerbread手机(原装和Cyanogen 2.3.*),2.1版本的HTC Legend能够正常工作。 - logcat
上面问题的根本原因可能有几十种不同的情况。所以,虽然这个答案显然不能适用于所有人,但它对我确实起到了作用。非常感谢! :) - smheidrich

1

在Ubuntu上观察到相同的问题,我尝试了以下方法并成功解决:

参考:link

使用上述参考中的命令udevadm,例如:

"sudo udevadm test --action="SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="[vendor_id]", ENV{ID_MODEL_ID}=="[model_id]" MODE="0666", SYMLINK+="[Device_Name]"" $(udevadm info -q path -n /dev/bus/usb/001/[DevNum])"

这似乎修复了一些链接文件,并解决了一段时间后adb无法检测设备的问题。

1
同样的问题,我使用的是Mac OS。但是通过Android文件传输应用程序可以识别连接的设备。这一切始于S3手机(已root),我以为是手机出了问题,因为Nexus 7(原厂)正常工作。经过三天的连接/重新连接后,它也无法被adb识别。尝试进行硬重置 - 没有帮助。
adb列表为空。
Android文件传输-完美运行。
我很快就会用完我的设备。

1

可能有点傻,但我现在遇到了类似的问题,经过一个小时的检查,我发现问题出在我的USB集线器上,其中连接了这些设备,实际上并没有真正连接到电脑上。

事实上,USB线确实已连接,但由于某种原因它们可能没有良好的接触,所以会不时地随机失败。


1
尝试使用adb kill-server停止adb并使用另一个命令'adb devices'重新启动它。它应该可以正常工作并再次检测到您的设备。(对于那些可以编辑我的帖子的人:任何其他命令都会启动服务器,而不仅仅是adb start-server,因此请不要在没有至少留下评论的情况下进行编辑)

1
我已经尝试过了,我发出了命令$adb kill-server; adb start-server; adb devices,但它返回一个空列表。 - pharaoh
你确定那不是设备问题吗?你重新插入设备后是否开启了“USB调试”? - Aurelian Cotuna

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