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

Wait for Android emulator to be running before next shell command?

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

emulator -avd TEST_AVD

模拟器启动正常,但 shell 脚本从未完成执行。即使在模拟器完成启动后它也会挂在那里。我尝试了一些我能找到的其他论点,但没有什么能完全达到我想要的效果。当模拟器准备好运行时,我如何知道或停止 shell 命令?

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

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

但是,我不想 运行 gradle 任务,直到模拟器完成启动,我不知道如何在终端中执行此操作。

如果你想在启动模拟器后做一些事情,你应该在后台启动它

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]

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

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

基本上:

  1. 等待device/emulator进入adbdevice状态
  2. 打开 shell 并每隔 1 秒休眠一次,直到 sys.boot_completed 属性 变为 true

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

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