我们正在为我们的 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 或任何其他黑魔法。
找到了解决它的方法,因此在此处发布以保持完整性。请注意,我并不是说这是解决问题的最佳方法,但它对我们有用。
因此,我们意识到问题是在 CI 长时间不活动(数小时范围内)之后发生的。所以我们创建了一个简单的脚本,adb devices每 10 秒调用一次。问题消失了,不再有“等待设备”的问题。
在 Linux 上,你可以通过一个简单的cron工作来做到这一点,在 OSX 上launchctl,我相信有一个 Windows 等价物。
无论如何,每 10 秒“ping”一次设备为我们解决了这个问题。
| 归档时间: |
|
| 查看次数: |
37105 次 |
| 最近记录: |