Machine executor による Android イメージ
概要
Android マシンイメージには、CircleCI で Linux マシンイメージにアクセスする場合と同様に、 Linux machine Executor を通じてアクセスできます。 Android マシンイメージは、ネストされた仮想化と x86 Android エミュレーターをサポートしています。 そのため、Android UI テストに利用できます。 また、イメージには Android SDK がプリインストールされています。
Android マシンイメージの使用
プリインストールされたソフトウェア
現在プリインストールされているソフトウェアのリストについては、 Discuss ページで四半期ごとの更新のお知らせを参照してください。
例
以下で、Android マシン イメージの使用方法について、Orb あり、Orb なしのいくつかの設定例で説明します。
Orb を使用するシンプルな例
以下の例では、Android Orb を使用して 1 つのジョブを実行します。
この例では必ずプレースホルダーのバージョンを置き換えてください。
# .circleci/config.yaml
version: 2.1
orbs:
android: circleci/android@x.y.z
# https://circleci.com/developer/orbs/orb/circleci/android for latest version
workflows:
test:
jobs:
# This job uses the Android machine image by default
- android/run-ui-tests:
# Use pre-steps and post-steps if necessary
# to execute custom steps before and afer any of the built-in steps
system-image: system-images;android-29;default;x86
Orb を使用する複雑な例
この例では、より細かな Orb コマンドを使用して、 start-emulator-and-run-tests コマンドの処理を実現する方法を示しています。
この例では必ずプレースホルダーのバージョンを置き換えてください。
# .circleci/config.yml
version: 2.1
orbs:
android: circleci/android@x.y.z
# https://circleci.com/developer/orbs/orb/circleci/android for latest version
jobs:
test:
executor:
name: android/android-machine
resource-class: large
steps:
- checkout
# Create an AVD named "myavd"
- android/create-avd:
avd-name: myavd
system-image: system-images;android-29;default;x86
install: true
# By default, after starting up the emulator, a cache will be restored,
# "./gradlew assembleDebugAndroidTest" will be run and then a script
# will be run to wait for the emulator to start up.
# Specify the "post-emulator-launch-assemble-command" command to override
# the gradle command run, or set "wait-for-emulator" to false to disable
# waiting for the emulator altogether.
- android/start-emulator:
avd-name: myavd
no-window: true
restore-gradle-cache-prefix: v1a
# Runs "./gradlew connectedDebugAndroidTest" by default.
# Specify the "test-command" parameter to customize the command run.
- android/run-tests
- android/save-gradle-cache:
cache-prefix: v1a
workflows:
test:
jobs:
- test
Orb を使用しない例
以下の例では、circleci/android Orb なしで Android マシン イメージを使用しています。 以下のステップは、Orb の run-ui-tests ジョブを使用して実行する処理に類似しています。
# .circleci/config.yml
version: 2.1
jobs:
build:
machine:
image: android:default
# To optimize build times, we recommend "large" and above for Android-related jobs
resource_class: large
steps:
- checkout
- run:
name: Create avd
command: |
SYSTEM_IMAGES="system-images;android-29;default;x86"
sdkmanager "$SYSTEM_IMAGES"
echo "no" | avdmanager --verbose create avd -n test -k "$SYSTEM_IMAGES"
- run:
name: Launch emulator
command: |
emulator -avd test -delay-adb -verbose -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim
background: true
- run:
name: Generate cache key
command: |
find . -name 'build.gradle' | sort | xargs cat |
shasum | awk '{print $1}' > /tmp/gradle_cache_seed
- restore_cache:
key: gradle-v1-{{ arch }}-{{ checksum "/tmp/gradle_cache_seed" }}
- run:
# run in parallel with the emulator starting up, to optimize build time
name: Run assembleDebugAndroidTest task
command: |
export TERM=dumb
./gradlew assembleDebugAndroidTest
- run:
name: Wait for emulator to start
command: |
circle-android wait-for-boot
- run:
name: Disable emulator animations
command: |
adb shell settings put global window_animation_scale 0.0
adb shell settings put global transition_animation_scale 0.0
adb shell settings put global animator_duration_scale 0.0
- run:
name: Run UI tests (with retry)
command: |
MAX_TRIES=2
run_with_retry() {
n=1
until [ $n -gt $MAX_TRIES ]
do
echo "Starting test attempt $n"
./gradlew connectedDebugAndroidTest && break
n=$[$n+1]
sleep 5
done
if [ $n -gt $MAX_TRIES ]; then
echo "Max tries reached ($MAX_TRIES)"
exit 1
fi
}
run_with_retry
- save_cache:
key: gradle-v1-{{ arch }}-{{ checksum "/tmp/gradle_cache_seed" }}
paths:
- ~/.gradle/caches
- ~/.gradle/wrapper
workflows:
build:
jobs:
- build
CircleCI Server v3.x での Android イメージの使用
注: Android マシンイメージは、現在は Google Cloud Platform (GCP) 上でのサーバー環境でのみご使用いただけます。
CircleCI Server 3.4 以降では、GCP へのインストールでは Android マシンイメージがサポートされています。 プロジェクトで Android イメージを使用するには、ジョブで image`キーを `android-default
に設定します。
version: 2.1
jobs:
my-job:
machine:
image: android-default
steps:
# job steps here
クラウドの場合は、上記のように Android Orb を使用することも可能です。 サーバー管理者がまず Orb をインポートする必要があります。 また、Orb にビルドされているデフォルトの Executor を使用するのではなく、下記の例のように Machine Executor の android-default
イメージを定義する必要があります。 Orb をインポートする方法については、 CircleCI Server Orb についてのページを参照してください。
この例では、きめ細かな Orb コマンドを使用して、 start-emulator-and-run-tests コマンドの機能を実現する方法を示しています。
この例では必ずプレースホルダーのバージョンを置き換えてください。
# .circleci/config.yml
version: 2.1
orbs:
android: circleci/android@x.y.z
# https://circleci.com/developer/orbs/orb/circleci/android for latest version
jobs:
test:
machine:
image: android-default
steps:
- checkout
# Create an AVD named "myavd"
- android/create-avd:
avd-name: myavd
system-image: system-images;android-29;default;x86
install: true
# By default, after starting up the emulator, a cache will be restored,
# "./gradlew assembleDebugAndroidTest" will be run and then a script
# will be run to wait for the emulator to start up.
# Specify the "post-emulator-launch-assemble-command" command to override
# the gradle command run, or set "wait-for-emulator" to false to disable
# waiting for the emulator altogether.
- android/start-emulator:
avd-name: myavd
no-window: true
restore-gradle-cache-prefix: v1a
# Runs "./gradlew connectedDebugAndroidTest" by default.
# Specify the "test-command" parameter to customize the command run.
- android/run-tests
- android/save-gradle-cache:
cache-prefix: v1a
workflows:
test:
jobs:
- test