Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to setup an emulator running API 25 using a build matrix on Travis CI?

I am attempting to setup Travis CI so that it runs instrumentation tests on an emulator running API 25. Travis runs the tests to completion on API 4/10/19, but fails to startup the emulator for API 25, with the following message:

$ echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI
Valid ABIs: no ABIs.
Error: Invalid --abi armeabi-v7a for the selected target.

The output of android list targets shows that the API 19 emulator has a Tag/ABI, whereas the API 25 emulator does not:

id: 7 or "android-19"
     Name: Android 4.4.2
     Type: Platform
     API level: 19
     Revision: 4
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
 Tag/ABIs : default/armeabi-v7a

id: 11 or "android-25"
     Name: Android 7.1.1
     Type: Platform
     API level: 25
     Revision: 3
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
 Tag/ABIs : no ABIs.

How can I fix this so that the API 25 emulator launches and runs the tests?

The full .travis.yml file is as follows:

language: android

android:
  components:
    - tools
    - platform-tools
    - tools # appears twice as per Travis docs
    - build-tools-23.0.1
    - build-tools-25.0.2
    - android-4
    - android-10
    - android-19
    - android-23
    - android-25
    - extra-android-m2repository
    - sys-img-armeabi-v7a-android-25

env:
  matrix:
    - ANDROID_TARGET=android-4 ANDROID_ABI=armeabi
    - ANDROID_TARGET=android-10 ANDROID_ABI=armeabi
    - ANDROID_TARGET=android-19 ANDROID_ABI=armeabi-v7a
    - ANDROID_TARGET=android-25 ANDROID_ABI=armeabi-v7a

before_script:
  # Create and start emulator
  - android list targets
  - jdk_switcher use oraclejdk8
  - echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI
  - emulator -avd test -no-skin -no-audio -no-window &
  - adb wait-for-device
  - while [[ `adb shell pm path android` == 'Error'* ]]; do sleep 2; done
  - adb shell input keyevent 82 &

script: ./gradlew --info connectedAndroidTest

sudo: false
like image 571
fractalwrench Avatar asked Jul 14 '17 10:07

fractalwrench


People also ask

What is a build Matrix?

A build matrix is made up by several multiple jobs that run in parallel. This can be useful in many cases, but the two primary reasons to use a build matrix are: Reducing the overall build execution time. Running tests against different versions of runtimes or dependencies.

How do you trigger a build in Travis?

Only manual ways to trigger a build is; To visit the Repository page on travis-ci.com > Settings > Trigger Build [1]. You can also add additional configurations from the textbox that will pop up. Another option would be(from the command line) triggering an API request manually using Travis CI API v3[2].

Which of the following file is used to configure the Travis CI?

Configuration. Travis CI is configured by adding a file named . travis. yml , which is a YAML format text file, to the root directory of the repository.


1 Answers

Note: emulator version 26.1.4+ versions can introduce or fix bugs. If a reproducible ci build is required, the best option is to download the desired sdk-tools version no via android components.

Note: emulator version 26.1.3 is here including interesting fixes. I'm busy to revise my answer now:

enter image description here

Related issue using emulator 26.1.2 here. Relaunch last build like me to use 26.1.3 and pray, green

I am attempting to setup Travis CI so that it runs instrumentation tests on an emulator running API 25. Travis runs the tests to completion on API 4/10/19, but fails to startup the emulator for API 25...

How can I fix this so that the API 25 emulator launches and runs the tests?

Update: I confirmed that ARM ABIs for APIs 23, 25 and 26 are also missing in Android Studio, so:

  • It's not a Travis-ci issue. I reproduced it locally as shown in the next image.

  • You can use ARM ABI for API-24. I forked your project and it worked in build #6 (next image).

  • You can use Google APIs image for API-25 as I explain below using the new sdkmanager: 1

  • You can use Google APIs image for API-25 using legacy tools if you know the img name: 1,2,3

  • We need to ask to Google or someone else why the ARM ABIs for these APIs are missing.

Update: A related bug was already reported to Google and discussed here, please, star it:

For some reason it's marked as being only available on windows. I'm not sure if this is a problem with ADRT itself or the configuration for this package, but from a quick look it seems like it's probably a problem with adrt itself.

enter image description here

enter image description here


I'm not sure if the api-25 issue is related but I expect that it will work combining several solutions:

  • Use system images with google_apis to simplify the build matrix and avoid missing ABIs.
  • Use the new sdkmanager and avdmanager required by the recent Sdk Tools.
  • Use the new Trusty images including these tools to simplify the Travis-ci configuration or alternatively use dist: precise as explained here.

See the links below to working samples using a build matrix that includes Api-25 emulator.


I updated the api 23 system image one time on a macbook via Android Studio and appeared a message about the new version was not supported by my computer, so I use the google_apis one.

I offer a possible solution to the issue commented by Ashish Pathak (I'm also ardock) here.

I need to update my response to support the new Travis-ci images that comes with new SDK tools.

The new pre-installed Sdk Tools will simplify the solution and reduce the YAML file in size.


As announced in this blog post by Carmen Andoh and Dominic Jodoin on 19 Jun 2017:

Updates are coming to all Ubuntu Trusty 14.04 images

This new generation of Trusty images is already available in production and can be used by adding group: edge in your .travis.yml file:

sudo: required
dist: trusty

group: edge  # Add this

And as explained here:

As a bit more information, this new Android image comes with:

Android SDK 25.2.3 build-tools-25.0.2

The new sdkmanager tool - a command line tool that allows you to view, install, update, and uninstall packages for the Android SDK. Replaces the previous android tool, see https://developer.android.com/studio/tools/help/android.html

Also, the new Android image should be retro-compatible. See the full list of Android SDK components that can be specified in the .travis.yml file, including build-tools-26.0.0-preview.

But they are not using the new avdmanager, I'll try to fix it this weekend.

Alternatively, you can use the previous images by adding dist: precise.


The lines below are part of my answer on a related question: prior to the images update:

Full working sample using constraint-layout codelab repository for Android API level 22 to 25:

Two more samples using sdkmanager and avdmanager:

  • Android Maps Utils library - Google
  • Dexter library - Karumi

References

Official documentation related to Auto-download missing packages with Gradle

The new Emulator options are explained in Start the Emulator from the Command Line

avdmanager explained here replaces android avd since SDK tools version 25.3.0

sdkmanager explained here also enhanced to view and accept all licenses from the command line

like image 132
albodelu Avatar answered Nov 15 '22 18:11

albodelu