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

Ada*_*331 16 shell android android-emulator

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

emulator -avd TEST_AVD
Run Code Online (Sandbox Code Playgroud)

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

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

sh "emulator -avd TEST_AVD"
sh "./gradlew clean test spoon"
Run Code Online (Sandbox Code Playgroud)

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

Die*_*ano 21

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

emulator -avd TEST_AVD &
adb wait-for-device
# other stuff here
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)


Jon*_*kis 7

要等到设备(或仿真器)启动,您可以执行以下操作(已由?????????回答):

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

基本上:

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


R. *_*ski 6

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

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