2016-12-14 4 views
9

Ich begann Befehl einen Android-Emulator mit dem folgenden Shell:Warten Sie, bis der Android-Emulator vor dem nächsten Shell-Befehl ausgeführt wird?

emulator -avd TEST_AVD 

Der Emulator ganz gut gestartet, aber der Shell-Skript ausgeführt werden nie beendet. Es bleibt nur dort hängen, nachdem der Emulator den Startvorgang abgeschlossen hat. Ich habe mit einer Reihe anderer Argumente versucht, die ich finden konnte, aber nichts konnte tun, was ich will. Woher weiß ich, oder stoppe den Shell-Befehl, wenn der Emulator bereit ist zu gehen?

Ich richte unser Jenkins CI ein, um eine Jenkins-Datei zu verwenden, um den Emulator zu starten, und führe dann eine Reihe von Befehlen aus. Kurz gesagt, würde Ich mag, dies zu tun:

sh "emulator -avd TEST_AVD" 
sh "./gradlew clean test spoon" 

Allerdings möchte ich nicht die gradle Aufgaben ausgeführt werden, bis der Emulator Inbetriebnahme abgeschlossen ist, und ich kann nicht herausfinden, wie man das in der Terminal.

Antwort

11

Wenn Sie etwas tun wollen, nachdem Sie den Emulator starten, sollten Sie es im Hintergrund starten

emulator -avd TEST_AVD & 
adb wait-for-device 
# other stuff here 

adb für ein Gerät über einen Transport warten kann, in einem bestimmten Zustand sein

adb wait-for[-<transport>]-<state> 
           - wait for device to be in the given state: 
           device, recovery, sideload, or bootloader 
           Transport is: usb, local or any [default=any] 
+0

Das hat sehr geholfen, danke. Jetzt muss ich nur noch einen Weg finden, den Status bis zum Start zu lesen und von dort aus weiterzugehen. Ich werde zurückkommen, wenn ich etwas finde. – AdamMc331

+0

Danke für die Bearbeitung. Warten auf Gerät könnte genau das sein, was ich brauche. Ich werde es einen Testlauf geben. – AdamMc331

+0

Upvoted und akzeptiert, weil dies getan hat, was ich gefragt habe. Wenn Sie Zeit haben, fragen Sie sich, ob ich diese Frage noch einen Schritt weiter bringen könnte. Dies ist abgeschlossen, wenn das Gerät geöffnet wird, aber/nicht/wenn es gebootet wird. (aka Ich sehe das abgeschlossen, während es immer noch die "android" Animation zeigt). Irgendeine Idee, wie ich so weit gehen kann, darauf zu warten, dass es vollständig gebootet wird, und auf dem Home-Bildschirm? – AdamMc331

0

Um zu warten, bis das Gerät (oder der Emulator) startet, können Sie Folgendes tun (wie auch already answered by Пионерка):

adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;' 
Grundsätzlich

:

  1. Warte Gerät/Emulator zu sein in adb device Zustand
  2. offene Schale & Schlafes in Intervallen von 1 Sekunde, bis die sys.boot_completed Eigenschaft wahr wird
3

Wenn jemand daran interessiert sein würde, was Android Studio tut, wenn der Emulator ausgeführt wird, ist die Antwort this class:

  1. Wenn das Gerät online ist, ist es bereit. Keine Notwendigkeit, zu weiteren Schritten zu gehen.
  2. Checks Systemeigenschaft adb shell getprop dev.bootcomplete, bis es auf 1
  3. Für API 23+ Geräte ausgeführt Befehl zum Entsperren Bildschirm gleich: adb shell wm dismiss-keyguard
  4. Warten 1 Sekunde.
+0

Ich bekomme einen 404 für den gegebenen Link. Das nächste, was ich finden konnte, war das: https://github.com/JetBrains/android/blob/abd1f189043f83ffbb3be33e60fc925deaeae831/android/src/com/android/tools/idea/avdmanager/EmulatorConnectionListener.java Allerdings, was ich die Schecks sagen kann Es ist nicht annähernd so beteiligt - es macht nur Schritte 1 und 2. – vaughandroid

+0

Link ist fest und Beschreibung entsprechend. –

Verwandte Themen