CircleCI에서 안드로이드 에뮬레이터 실행

CircleCI와 같은 CI에서 Android 에뮬레이터를 실행하는 것은 Android 에뮬레이터에 데비안 터미널에서 사용할 수 없는 하드웨어 가속이 필요하기 때문에 테스트 사례를 자동화하려는 많은 사람들에게 도전이었습니다.

우리는 iOS 터미널을 사용하여 CircleCI에서 실행되는 헤드리스 에뮬레이터를 얻을 수 있었습니다.

iOS 터미널은 에뮬레이터를 수용하도록 설정해야 하며 SDK, NDK, 플랫폼 도구,

다음을 수행해야 합니다.
  • ANDROID_SDK_ROOT 구성
  • SDK 도구를 다운로드하고 압축을 풉니다
  • .
  • 라이선스 디렉토리 생성 및 모든 라이선스에 동의
  • SDKManager 경로 설정
  • 다음을 설치하십시오.
  • "플랫폼 도구"
  • "플랫폼, 안드로이드-29"
  • "빌드 도구, 29.0.2"
  • "ndk-번들"
  • "system-images;android-29;google_apis;x86_64"
  • "에뮬레이터"


  • 그렇게 하기 위해 sh를 만들어 봅시다.

    scripts/install-android-tools.sh



    
    if [ -d $ANDROID_SDK_ROOT ]
    then
        echo "Directory $ANDROID_SDK_ROOT already exists so we're skipping the install. If you'd like to install fresh tools, edit this script to invalidate the CI cache."
        exit 0
    fi
    
    mkdir -p $ANDROID_SDK_ROOT
    cd $ANDROID_SDK_ROOT
    curl https://dl.google.com/android/repository/sdk-tools-darwin-4333796.zip -o sdk-tools.zip
    
    unzip sdk-tools.zip
    
    mkdir -p "$ANDROID_SDK_ROOT/licenses"
    
    echo "24333f8a63b6825ea9c5514f83c2829b004d1fee" > "$ANDROID_SDK_ROOT/licenses/android-sdk-license"
    echo "84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_SDK_ROOT/licenses/android-sdk-preview-license"
    echo "d975f751698a77b662f1254ddbeed3901e976f5a" > "$ANDROID_SDK_ROOT/licenses/intel-android-extra-license"
    
    SDKMANAGER=$ANDROID_SDK_ROOT/tools/bin/sdkmanager
    
    $SDKMANAGER "platform-tools"
    $SDKMANAGER "platforms;android-29"
    $SDKMANAGER "build-tools;29.0.2"
    $SDKMANAGER "ndk-bundle"
    $SDKMANAGER "system-images;android-29;google_apis;x86_64"
    $SDKMANAGER "emulator"
    
    echo "y" | sudo $SDKMANAGER --install "ndk;20.0.5594570" --sdk_root=${ANDROID_SDK_ROOT}
    


    경로를 설정하고 스크립트를 실행하고 캐시하기 위해 circle ci에 명령 블록을 작성해 보겠습니다.

      android-sdk-dependencies:
        description: "Install and set android SDK"
        steps:
          - run:
              name: set ANDROID_SDK_ROOT
              command: |
                echo 'export ANDROID_SDK_ROOT=$HOME/android-tools'  >> $BASH_ENV
          - restore_cache:
              key: android=tools-v1-{{ checksum "scripts/install-android-tools.sh" }}-{{ arch }}
    
          - run:
              name: install android tools
              command: |
                sh scripts/install-android-tools.sh
                echo 'export PATH=$ANDROID_SDK_ROOT/tools/bin:$PATH'  >> $BASH_ENV
                echo 'export PATH=$ANDROID_SDK_ROOT/tools:$PATH'  >> $BASH_ENV
                echo 'export PATH=$ANDROID_SDK_ROOT/platform-tools:$PATH'  >> $BASH_ENV
                echo 'export PATH=$ANDROID_SDK_ROOT/emulator:$PATH'  >> $BASH_ENV
                source $BASH_ENV
                sdkmanager --list
          - save_cache:
              key: android=tools-v1-{{ checksum "scripts/install-android-tools.sh" }}-{{ arch }}
              paths:
                - /Users/distiller/android-tools
    


    이제 에뮬레이터를 만들고 백그라운드 작업으로 부팅하는 일만 남았습니다.

    
      create-launch-android-emulator:
        description: "create and launch android emulators"
        steps:
          - run:
              name: create AVD
              command: echo "no" | avdmanager --verbose create avd --force --name "Pixel_3a_API_29" --package "system-images;android-29;google_apis;x86_64"
    
          - run:
              name: start AVD
              command: emulator @Pixel_3a_API_29 -no-window -no-audio
              background: true
    
          - run:
              name: wait for emulator
              command: adb wait-for-device shell 'while [[ -z $(getprop dev.bootcomplete) ]]; do sleep 1; done;'
    
    


    이제 에뮬레이터가 CCI에서 실행 중이며 here CircleCI의 전체 구성에 대한 링크입니다.

    질문이 있는 경우 댓글로 알려주시면 피드백을 기다리겠습니다 🍻

    좋은 웹페이지 즐겨찾기