等待Android模拟器在下一个shell命令之前运行?

我使用下面的shell命令启动了一个Android模拟器:

emulator -avd TEST_AVD 

模拟器启动正常,但shell脚本永远不会执行。 即使仿真器完成启动后,它仍然挂在那里。 我尝试了一些我能find的其他论点,但没有什么能够完成我想要的。 当模拟器准备好时,我怎么知道或停止shell命令?

我正在设置我们的Jenkins CI来使用Jenkinsfile来启动模拟器,然后运行一系列gradle命令。 总之,我想这样做:

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

但是,我不想在模拟器启动完成之前运行gradle任务,我不知道如何在terminal中这样做。

Solutions Collecting From Web of "等待Android模拟器在下一个shell命令之前运行?"

如果你想在启动模拟器之后做些什么,你应该在后台启动它

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

adb可以等待传输设备处于特定状态

  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] 

如果有人对Android Studio有什么兴趣,在运行模拟器时,答案就是这个类 :

  1. 如果设备在线,那么就准备好了。 没有必要去进一步的步骤。
  2. 检查系统属性adb shell getprop dev.bootcomplete直到它等于1
  3. 检查是否至less(以下条件之一):
    • 5个进程正在运行 – 调用adb shell ps
    • android.process.acore进程正在运行
    • com.google.android.wearable.app进程正在运行(在手表的情况下)
  4. 对于API 23+设备运行命令来解锁屏幕: adb shell wm dismiss-keyguard
  5. 等待1秒。

要等到设备(或模拟器)启动,可以这样做(如已经由Пионерка回答 ):

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

基本上:

  1. 等待设备/仿真器处于adb device状态
  2. 以1秒为间隔打开shell并hibernate,直到sys.boot_completed属性变为true