3

エミュレータを数回開くと、オフラインモードで表示され、画面の上部に3g記号の代わりに「X」が表示され、ネットワーク接続が表示されません。

私が見つけたログの唯一の明らかな違いは次のとおりです。

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 に答える