Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot start an android emulator in gitlab-ci

I am trying to setup instrumentation tests in gitlab-ci. However the job is stuck at a point with following message:

PANIC: Missing emulator engine program for 'x86' CPU.

Here is the ci configuration that I am using. The pipeline build runs successfully till Test stage(debugTests) but eventually fails at instrumentation_tests.

image: openjdk:8-jdk

variables:
  ANDROID_COMPILE_SDK: "28"
  ANDROID_BUILD_TOOLS: "28.0.3"
  ANDROID_SDK_TOOLS:   "4333796"

before_script:
- apt-get --quiet update --yes
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
- wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
- unzip -d android-sdk-linux android-sdk.zip
- echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "tools" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
- export ANDROID_HOME=$PWD/android-sdk-linux
- export ANDROID_AVD_HOME=$HOME/.android/avd
- export ANDROID_SDK_HOME=$PWD/android-sdk-linux
- export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
- export PATH=$PATH:$PWD/android-sdk-linux/tools/
- chmod +x ./gradlew
# temporarily disable checking for EPIPE error and use yes to accept all licenses
- set +o pipefail
- yes | android-sdk-linux/tools/bin/sdkmanager --licenses
- set -o pipefail

stages:
- build
- test
- quality_assurance
- deploy

build_job:
  stage: build
  script:
  - ./gradlew clean assembleRelease
  artifacts:
    paths:
    - app/build/outputs/

lintDebug:
  stage: build
  script:
  - ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint

assembleDebug:
  stage: build
  script:
  - ./gradlew assembleDebug
  artifacts:
    paths:
    - app/build/outputs/

debugTests:
  stage: test
  script:
  - ./gradlew -Pci --console=plain :app:testDebug

instrumentation_tests:
  stage: test
  script:
  - wget --quiet --output-document=android-wait-for-emulator https://raw.githubusercontent.com/travis-ci/travis-cookbooks/0f497eb71291b52a703143c5cd63a217c8766dc9/community-cookbooks/android-sdk/files/default/android-wait-for-emulator
  - chmod +x android-wait-for-emulator
  - echo y | ${ANDROID_HOME}/tools/bin/sdkmanager "system-images;android-${ANDROID_COMPILE_SDK};google_apis_playstore;x86"
  - echo y | ${ANDROID_HOME}/tools/bin/sdkmanager --update
  - echo no | ${ANDROID_HOME}/tools/bin/avdmanager create avd -k "system-images;android-${ANDROID_COMPILE_SDK};google_apis_playstore;x86" -n test
  - emulator -list-avds
  - emulator -avd test -no-window -no-audio &
#  - emulator -avd testAVD -no-audio -no-window &
#  - adb wait-for-device
  - ./android-wait-for-emulator
  - adb devices
  - adb shell settings put global window_animation_scale 0 &
  - adb shell settings put global transition_animation_scale 0 &
  - adb shell settings put global animator_duration_scale 0 &
  - adb shell input keyevent 82 &
  - ./gradlew connectedAndroidTest
  - ./ci/stop-emulators.sh
  artifacts:
    name: "reports_${CI_PROJECT_NAME}_${CI_BUILD_REF_NAME}"
    when: on_failure
    expire_in: 4 days
    paths:
    - app/build/reports/androidTests/connected/

static_analysis:
  stage: quality_assurance
  script:
  - ./gradlew lint
  - ./gradlew checkstyle
  - ./gradlew pmd
  - ./gradlew findbugs
  artifacts:
    name: "reports_${CI_PROJECT_NAME}_${CI_BUILD_REF_NAME}"
    when: on_failure
    expire_in: 4 days
    paths:
    - app/build/reports/

deploy_internal:
  stage: deploy
  script:
  - bundle exec fastlane android deploy_lane
  when: manual

Below are the few lines of logs before job fails with a timeout error.

$ echo no | ${ANDROID_HOME}/tools/bin/avdmanager create avd -k "system-

images;android-${ANDROID_COMPILE_SDK};google_apis_playstore;x86" -n test
Loading local repository...                                                     
[=========                              ] 25% Loading local repository...       
[=========                              ] 25% Fetch remote repository...        
[=========                              ] 25% Fetch remote repository...        
[=========                              ] 25% Fetch remote repository...        
[=======================================] 100% Fetch remote repository...       
Auto-selecting single ABI x86
Do you wish to create a custom hardware profile? [no] $ emulator -list-avds
test
$ emulator -avd test -no-window -no-audio &
$ ./android-wait-for-emulator
PANIC: Missing emulator engine program for 'x86' CPU.
Waiting for emulator to start
Pulling docker image gitlab/gitlab-runner-helper:x86_64-4745a6f3 ...
ERROR: Job failed: execution took longer than 1h0m0s seconds
like image 555
Angad Singh Avatar asked Mar 13 '19 06:03

Angad Singh


1 Answers

You are using wrong "legacy" emulator binary from tools folder. Instead install and use emulator from emulator sdk folder.

sdkmanager "emulator"
$ANDROID_HOME/emulator/emulator -avd test ...
like image 84
Sergii Pechenizkyi Avatar answered Sep 19 '22 00:09

Sergii Pechenizkyi