web-dev-qa-db-ja.com

次のシェルコマンドの前にAndroidエミュレーターが実行されるのを待ちますか?

次のシェルコマンドを使用してAndroidエミュレーターを起動しました:

emulator -avd TEST_AVD

エミュレータは正常に起動しますが、シェルスクリプトの実行が終了することはありません。エミュレータが起動を完了した後でも、そこでハングします。私は見つけることができる他の多くの議論を試みましたが、私が望むことを完全に行うことはできませんでした。エミュレーターの準備ができたら、シェルコマンドを確認または停止するにはどうすればよいですか?

Jenkinsfileを使用してエミュレーターを起動し、一連のgradleコマンドを実行するようにJenkinsCIをセットアップしています。要するに、私はこれをしたいと思います:

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

ただし、エミュレーターの起動が完了するまでgradleタスクを実行したくないので、ターミナルで実行する方法がわかりません。

17
AdamMc331

エミュレータを起動した後に何かをしたい場合は、バックグラウンドで起動する必要があります

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]
21

デバイス(またはエミュレーター)が起動するまで待つには、次のようにすることができます( すでにПионеркаによって回答されています ):

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

基本的に:

  1. デバイス/エミュレーターがadbdevice状態になるのを待ちます
  2. シェルを開き、sys.boot_completedプロパティがtrueになるまで1秒間隔でスリープします
8
Jonas Masalskis

誰かがAndroid Studioが行うこと、エミュレーターを実行しているとき、答えは このクラス

  1. デバイスがオンラインの場合、準備ができています。それ以上の手順に進む必要はありません。
  2. システムプロパティをチェックしますadb Shell getprop dev.bootcomplete1に等しくなるまで
  3. API 23以降のデバイスの場合、コマンドを実行して画面のロックを解除します。adb Shell wm dismiss-keyguard
  4. 1秒待ちます。
6
R. Zagórski