次のシェルコマンドを使用してAndroidエミュレーターを起動しました:
emulator -avd TEST_AVD
エミュレータは正常に起動しますが、シェルスクリプトの実行が終了することはありません。エミュレータが起動を完了した後でも、そこでハングします。私は見つけることができる他の多くの議論を試みましたが、私が望むことを完全に行うことはできませんでした。エミュレーターの準備ができたら、シェルコマンドを確認または停止するにはどうすればよいですか?
Jenkinsfileを使用してエミュレーターを起動し、一連のgradleコマンドを実行するようにJenkinsCIをセットアップしています。要するに、私はこれをしたいと思います:
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]
デバイス(またはエミュレーター)が起動するまで待つには、次のようにすることができます( すでにПионеркаによって回答されています ):
adb wait-for-device Shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;'
基本的に:
device
状態になるのを待ちますsys.boot_completed
プロパティがtrueになるまで1秒間隔でスリープします誰かがAndroid Studioが行うこと、エミュレーターを実行しているとき、答えは このクラス :
adb Shell getprop dev.bootcomplete
1に等しくなるまでadb Shell wm dismiss-keyguard