androidandroid-emulatorgoogle-play-servicesandroid-virtual-devicecircleci

Android AVD with Google Play Services on Circle.ci


I am using circle.ci to test my code on an emulator.

I have some espresso tests which are using maps and places API from Google. Those tests are not working with the emulator given by circle.ci

So I tried to do my own, in the circle.yml

machine:
  environment:
    PATH: "~/$CIRCLE_PROJECT_REPONAME/gradle-2.9/bin:$PATH"
    TERM: "dumb"
    ADB_INSTALL_TIMEOUT: "10"
    GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError"'

dependencies:
  pre:
    - android list targets
    - wget "https://services.gradle.org/distributions/gradle-2.9-bin.zip"; unzip gradle-2.9-bin.zip
    - android list sdk -a -e
    - echo y | android update sdk --no-ui --all --filter build-tools-23.0.2
    - echo y | android update sdk --no-ui --all --filter tool,android-22,extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository,addon-google_apis-google-22
    - echo y | android update sdk --no-ui --all --filter sys-img-armeabi-v7a-google_apis-22
test:
  override:
    - echo no | android create avd -n avd22 -t 12 --abi google_apis/armeabi-v7a
    - emulator -avd avd22 -no-audio -no-window:
        background: true
        parallel: true

Sadly, even I when I run android update sdk --no-ui --all --filter sys-img-armeabi-v7a-google_apis-22 if I do a android list target it appear that my image is not available:

id: 12 or "Google Inc.:Google APIs:22"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 1
     Description: Android + Google APIs
     Based on Android 5.1.1 (API level 22)
     Libraries:
      * com.google.android.media.effects (effects.jar)
          Collection of video effects
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
 Tag/ABIs : no ABIs.

If someone has a solution to use an emulator on circle.ci with play services it would be really useful for me...


Solution

  • After a lot of try I could finally create a Android AVD with play services using this config file:

    machine:
      environment:
        PATH: "~/$CIRCLE_PROJECT_REPONAME/gradle-2.9/bin:$PATH"
        TERM: "dumb"
        ADB_INSTALL_TIMEOUT: "10"
        GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError"'
    dependencies:
      pre:
        - echo y | android update sdk --no-ui --all --filter tools
        - echo y | android update sdk --no-ui --all --filter platform-tools
        - echo y | android update sdk --no-ui --all --filter extra-android-m2repository
        - echo y | android update sdk --no-ui --all --filter extra-android-support
        - echo y | android update sdk --no-ui --all --filter extra-google-google_play_services
        - echo y | android update sdk --no-ui --all --filter extra-google-m2repository
        - echo y | android update sdk --no-ui --all --filter android-22
        - echo y | android update sdk --no-ui --all --filter build-tools-23.0.2
        - echo y | android update sdk -a -u -t sys-img-armeabi-v7a-google_apis-22
        - android list targets
    test:
      override:
        - echo no | android create avd -n custom-android22-googleapis -t "android-22" --abi google_apis/armeabi-v7a
        - android list avd
        - emulator -avd custom-android22-googleapis -no-audio -no-window:
            background: true
            parallel: true
        # wait for emulator to have booted
        - circle-android wait-for-boot
        # Sleeping isn't a brilliant fix...
        - sleep 30
        - fb-adb rcmd screencap -p > $CIRCLE_ARTIFACTS/screen-$(date +"%T").png
        - adb shell input keyevent 82
        - ./gradlew connectedAndroidTest -PdisablePreDex --console=plain --info
        #- fb-adb devices
        - fb-adb rcmd screencap -p > $CIRCLE_ARTIFACTS/screen-$(date +"%T").png