3

每隔几次我打开模拟器,它似乎处于离线模式,屏幕顶部有“X”而不是 3g 符号,并且没有明显的网络连接。

我发现的日志中唯一明显的区别是:

Network works:
12-03 11:24:48.732 D/qemud   (   37): client_fd_receive: attempting registration for service 'gsm'
12-03 11:24:48.732 D/qemud   (   37): client_fd_receive:    -> received channel id 2
12-03 11:24:48.742 D/qemud   (   37): client_registration: registration succeeded for client 2

Network fails:
12-03 03:02:11.688 D/qemud   (   37): client_fd_receive: attempting registration for service 'gsm'
12-03 03:02:11.688 D/qemud   (   37): client_fd_receive:    -> received channel id 2

有谁知道为什么从一次运行到另一次注册不会成功?

4

1 回答 1

1

由于这是针对 CI 的,因此需要一个临时的解决方法。我们的构建首先运行门控测试以检查网络是否正常运行。每次我们的测试开始时,都会创建模拟器并测试网络连接性。只有当网络启动时,测试才会运行,否则会在几分钟后重新安排(使用新的模拟器实例)。虽然这并不能防止问题发生,但它确实可以防止我们的持续集成系统产生错误的故障。

我测试网络是否启动的方法是使用一个作为单独作业运行的小型 groovy 脚本:

String status=
   ['sh', '-c', 'adb shell dumpstate | grep -m1 \"Mobile data state: \"'].execute().text.trim();

if (status=="Mobile data state: CONNECTED") {
   System.exit(0);
} else {
   System.exit(1);
}

虽然可能会浪费资源,但它胜过间歇性故障电子邮件的替代方案。

于 2011-01-03T23:43:42.727 回答