最近在写一个与手机有关的应用,大致上可以认为是豌豆荚的精简版本,通过大量的调用 adb.exe 来实现相关的功能。在确认 adb.exe 的输出结果时,需要解析一下 adb.exe 执行后输出的字符串内容。

大部分情况下都很正常,就是有一个很特殊的情况:在刚开机第一次运行 adb.exe 时,adb.exe 的输出内容解析起来的结果不对。因为我的机器很少关机从没碰到过类似的问题,只有测试人员在各种情况下测试才发现这个问题:开机后第一次启动程序执行结果异常,但是第二次就正常了。

找来找去,最后终于知道结果了:在 adb.exe 第一次运行时的输出内容会略为不同。在开机后第一次运行 adb.exe 时,会额外输出以下内容:

* daemon not running. starting it now on port 5037 *
* daemon started successfully *

而在我写代码的时候, adb.exe 都不知道已经执行过多少次了,所以我从来没有捕捉到这个信息。要知道,如果你的代码里没有预见到 adb server 第一次启动时输出的额外内容,解析起来多半会出错误的结果。

这就是原因,估计有一些人也会碰到类似的坑。