2016-12-14 12 views
9

zacząłem Android emulatora za pomocą następującego polecenia powłoki:Czekać na emulator Androida, aby działał przed następnym poleceniem powłoki?

emulator -avd TEST_AVD 

Emulator uruchamia po prostu w porządku, ale skrypt nie zakończy wykonywanie. Po prostu zawiesza się, nawet po zakończeniu rozruchu emulatora. Próbowałem z wieloma innymi argumentami, które mogłem znaleźć, ale nic nie mogło zrobić tego, co chcę. Skąd mam wiedzieć lub zatrzymać polecenie powłoki, kiedy emulator jest gotowy do pracy?

Ustanawiam nasz Jenkins CI, aby użyć pliku Jenkins, aby uruchomić emulator, a następnie uruchomić serię poleceń gradle. Krótko mówiąc, chciałbym, aby to zrobić:

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

Jednak nie chcę uruchomić Gradle zadań aż emulator zakończył starcie, a ja nie mogę dowiedzieć się, jak to zrobić w terminal.

Odpowiedz

11

Jeśli chcesz coś zrobić po uruchomieniu emulatora należy go uruchomić w tle

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

adb może czekać na urządzeniu nad transportem być w określonym stanie

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

To bardzo pomogło, dzięki. Teraz muszę znaleźć sposób na odczytanie statusu, dopóki się nie zacznie i od tego miejsca. Wrócę, jeśli coś znajdę. – AdamMc331

+0

Dzięki za edycję. Oczekiwanie na urządzenie może być dokładnie tym, czego potrzebuję. Pójdę, żeby to zrobić. – AdamMc331

+0

Wycofano i zaakceptowano, ponieważ spełniło to moją prośbę. Jeśli masz czas, zastanawiam się, czy mógłbym zadać to pytanie o krok dalej. To kończy się, gdy urządzenie jest otwarte, ale nie/po zakończeniu rozruchu. (Aka widzę to kompletnie, podczas gdy wciąż pokazuje animację "android"). Jakiś pomysł, jak mogę posunąć się tak daleko, aby czekać na całkowite uruchomienie i na ekranie głównym? – AdamMc331

0

Poczekaj, aż urządzenie (lub emulator) uruchomi się, możesz zrobić coś takiego (jak było already answered by Пионерка):

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

Zasadniczo:

  1. Poczekaj na urządzeniu/emulatorze być w adb device państwowej
  2. surowym otwartym & snu w odstępach co 1 sekundę aż nieruchomość sys.boot_completed staje się prawdą
3

Jeśli ktoś byłby zainteresowany co robi Android Studio, kiedy działa emulator, odpowiedź brzmi: this class:

  1. Jeśli urządzenie jest w trybie online, oznacza to, że jest gotowe. Nie musisz iść do dalszych kroków.
  2. Kontrola właściwości systemu adb shell getprop dev.bootcomplete dopóki jest ona równa 1
  3. interfejsu API 23+ urządzeń biegów poleceń, aby odblokować ekran: adb shell wm dismiss-keyguard
  4. Waitsa 1 sekundę.
+0

Otrzymuję 404 dla danego łącza. Najbliższe, jakie mogłem znaleźć, to: https://github.com/JetBrains/android/blob/abd1f189043f83ffbb3be33e60fc925deaeae831/android/src/com/android/tools/idea/avdmanager/EmulatorConnectionListener.java Jednak z tego, co mogę powiedzieć, kontrole korzysta z niej nie jest tak zaangażowany - po prostu robi kroki 1 i 2. – vaughandroid

+0

Link jest poprawiony i opis odpowiednio. –

Powiązane problemy