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

时间:2016-12-14 20:48:05

标签: android shell android-emulator

我使用以下shell命令启动了Android模拟器:

emulator -avd TEST_AVD

模拟器启动很好,但shell脚本永远不会完成执行。即使在模拟器完成启动后,它也会挂起。我已经尝试过其他一些我能找到的论点,但没有什么可以做我想要的。当模拟器准备就绪时,我如何知道或停止shell命令?

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

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

但是,我不想在模拟器完成启动之前运行gradle任务,我无法弄清楚如何在终端中执行此操作。

3 个答案:

答案 0 :(得分:16)

如果您想在启动模拟器后执行某些操作,则应在后台启动它

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]

答案 1 :(得分:6)

如果有人对Android Studio的功能感兴趣,那么在运行模拟器时,答案是this class

  1. 如果设备在线,则表示已准备就绪。无需采取进一步措施。
  2. 检查系统属性adb shell getprop dev.bootcomplete,直到它等于1
  3. 对于API 23+设备运行命令解锁屏幕:adb shell wm dismiss-keyguard
  4. 等待1秒钟。

答案 2 :(得分:5)

要等到设备(或模拟器)启动,你可以做这样的事情(就像already answered by Пионерка一样):

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

基本上:

  1. 等待设备/模拟器处于adb device状态
  2. 打开shell&amp;在1秒间隔内睡眠,直到sys.boot_completed属性变为真实