Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
16
Help us understand the problem. What is going on with this article?
@muran001

CI用にヘッドレスなAndroidエミュレータを複数台立ち上げるシェルスクリプト

More than 5 years have passed since last update.

やりたいこと

  • AndroidのUIテストをやりたい。
    • 複数バージョンまとめてテストしたい。
    • CI環境で動かせるようにヘッドレスなエミュレータで実行したい。
    • シェルスクリプトでまとめてかけたら良いな。

いや、まてよ・・・・

  • テストを流し込むのは起動待ちした後にしないといけないけどどうやるんだ?
    • adb wait-for-deviceってたしかうまくいかないよな
    • そもそも、複数台立ち上げたときにエミュレータの起動待ちってどうやんの??

スクリプト本体

android sdkは事前に導入しておいてください。

start-multi-emulator.sh

#!/bin/sh

# android-19とandroid-22のエミュレータを作成
echo n | android create avd --force --name emulator-android-21 --target android-21 -c 50M -s WXGA800 --abi armeabi-v7a
echo n | android create avd --force --name emulator-android-19 --target android-19 -c 50M -s WXGA800 --abi armeabi-v7a

# エミュレータを実行
emulator -avd emulator-android-21 -no-skin -no-audio -no-window &
emulator -avd emulator-android-19 -no-skin -no-audio -no-window &

# 起動監視スクリプトを実行
./wait-for-boot.sh
wait-for-boot.sh
#!/bin/sh

spinstr='|/-\'
spin_index=0

spin_until () {
    while ! $@
    do
        spin_index=$(expr $(expr $spin_index + 1) % 4)
        printf "\r${spinstr:spin_index:1} "
        sleep 0.5
    done
    printf "\r"
}

adb_shell_getprop () {
    adb -s $1 shell getprop $2 | tr -d [:space:] # delete the whitespace
}

device_actually_ready () {
    [ "$(adb_shell_getprop $1 init.svc.bootanim)" = "stopped" ]
}

# エミュレータ一覧取得
adb start-server
DEVICES=$(adb devices | sed "1d;s/[[:space:]].*$//")

# エミュレータ毎に起動監視
for device in $DEVICES
do
    spin_until adb -s $device shell true 2> /dev/null
    # 起動確認するまでまつ
    spin_until device_actually_ready $device
    echo "$device is started"
    sleep 5
    # 起動後にロック解除
    adb -s $device shell input keyevent 82
done

実行方法

$ ./start-multi-emulator.sh

余談

  • CircleCIのVM内にcircle-androidってシェルスクリプトがあってそれが1台分のエミュレータ起動待ち処理を実装してたのでそれを流用しました
  • 複数台対応しないのかと問い合わせたところ自分でシェルスクリプト作れよ!って言われたので作りました。
16
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
muran001
2014年6月から大手SIerに見切りをつけてWeb系のエンジニアとして活動してます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
16
Help us understand the problem. What is going on with this article?