Start Building for Free
CircleCI.comアカデミーブログコミュニティサポート

Android イメージの Machine Executor での使用

4 months ago1 min read
クラウド
Server v4.x
Server v3.x
このページの内容

概要

Android マシンイメージには、CircleCI で Linux マシンイメージにアクセスする場合と同様に、 Linux machine Executor を通じてアクセスできます。 Android マシンイメージは、ネストされた仮想化と x86 Android エミュレーターをサポートしています。 そのため、Android UI テストに利用できます。 また、イメージには Android SDK がプリインストールされています。

Android マシンイメージの使用

設定ファイルに Android イメージを使用するには、 Orb を使用して、または、手動で設定することができます。 Android Orb を使用すると設定がシンプルになりますが、複雑なカスタムな設定は手動で行った方が効果的です。 このドキュメントでは、どちらの設定方法についても説明します。 詳細は、後述の「 」セクションを参照してください。

プリインストールされたソフトウェア

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.
      # "post-emulator-launch-assemble-command" コマンドを指定して
      # gradle コマンドの実行をオーバーライドするか、"wait-for-emulator" を false に設定して
      # エミュレーターの待機を完全に無効にします
       - android/start-emulator:
          avd-name: myavd
          no-window: true
          restore-gradle-cache-prefix: v1a
      # デフォルトで "./gradlew connectedDebugAndroidTest" を実行します
      # "test-command" パラメーターを指定してコマンド実行をカスタマイズします
      - 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:202102-01
    # ビルド時間を最適化するために、Android 関連のジョブには "large" 以上をお勧めします
    resource_class: large
    steps:
      - checkout
      - run:
          name: 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: エミュレーター起動
          command: |
            emulator -avd test -delay-adb -verbose -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim
          background: true
      - run:
          name: キャッシュ キー生成
          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:
          # ビルド時間を最適化するために、エミュレーターの起動と並列で実行します
          name: assembleDebugAndroidTest タスクの実行
          command: |
            ./gradlew assembleDebugAndroidTest
      - run:
          name: エミュレーターの起動の待機
          command: |
            circle-android wait-for-boot
      - run:
          name: エミュレーター アニメーションの無効化
          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: UI テストの実行 (リトライあり)
          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 v3.x の 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

ドキュメントの改善にご協力ください

このガイドは、CircleCI の他のドキュメントと同様にオープンソースであり、 GitHub でご利用いただけます。 ご協力いただき、ありがとうございます。

サポートが必要ですか

CircleCI のサポートエンジニアによる、サービスに関する問題、請求およびアカウントについての質問への対応、設定の構築に関する問題解決のサポートを行っています。 サポートチケットを送信して、CircleCI のサポートエンジニアにお問い合わせください。日本語でお問い合わせいただけます。

または、 サポートサイト から、サポート記事やコミュニティフォーラム、トレーニングリソースをご覧いただけます。