解决亚行“等待设备”问题

Jua*_*ado 9 android jenkins

我们正在为我们的 Android 开发设置一个持续集成服务器,我们很快就遇到了 ADB 的等待设备问题。

为了记录,我们已经尝试了很多、、 等的组合adb kill-server,但都无济于事。adb start-serveradb devices

可悲的是,我在互联网上发现的所有内容都是“拔出并重新插入设备”的变体,这显然不是我们的解决方案(我们不能让一个人坐在 CI 服务器旁拔出和重新插入设备之前每个构建)。

作为一点背景知识,我们在 Mac 上使用 Jenkins,因为它也为 iOS 运行我们的 CI。

在解决这个问题时,我认为如果在操作系统级别找到了设备,那至少是一个开始。实际上,运行类似system_profiler SPUSBDataType成功找到设备的命令,包括 ADB 在正常工作时报告的序列号。

我尝试了一些相当蹩脚的命令来“刷新”所有 USB 活动,但我无处可去。并不是说您可以挂载/卸载设备,但说实话,我什至不确定问题出在哪里,我对低级 USB 协议了解不够,更不用说 Mac 了。我对ADB 源代码潜伏期非常长。

所以在这一点上,我非常期待一个解决方案,它可以让我们在我们的 CI 服务器上持续运行 Android。无论是在每个 Jenkins 工作之前的几个命令,修补 ADB 或任何其他黑魔法。

Jua*_*ado 9

找到了解决它的方法,因此在此处发布以保持完整性。请注意,我并不是说这是解决问题的最佳方法,但它对我们有用。

因此,我们意识到问题是在 CI 长时间不活动(数小时范围内)之后发生的。所以我们创建了一个简单的脚本,adb devices每 10 秒调用一次。问题消失了,不再有“等待设备”的问题。

在 Linux 上,你可以通过一个简单的cron工作来做到这一点,在 OSX 上launchctl,我相信有一个 Windows 等价物。

无论如何,每 10 秒“ping”一次设备为我们解决了这个问题。


小智 5

在手机中启用 USB 调试(设置 => 开发人员选项)有帮助。