17

I'm trying to update an Android project from using the API Level 19 SDK and build tools to the newest API Level 21, including the Google APIs. Everything was running fine on Travis prior to this update (for example, see this build).

When I run with the new API level I see the following error:

0.42s$ echo no | android create avd --force -n test -t "Google Inc.:Google APIs:"$ANDROID_API_LEVEL --abi $ANDROID_ABI
Valid ABIs: no ABIs.
Error: Invalid --abi armeabi-v7a for the selected target.
The command "echo no | android create avd --force -n test -t "Google Inc.:Google APIs:"$ANDROID_API_LEVEL --abi $ANDROID_ABI" failed and exited with 1

See this build for the full Travis output.

Here's my .travis.yml:

language: android
jdk: oraclejdk7
# Turn off caching to avoid any caching problems
cache: false
# Use the Travis Container-Based Infrastructure (see #203)
sudo: false
env:
  global:
    - ANDROID_API_LEVEL=21
    - ANDROID_BUILD_TOOLS_VERSION=21.1.2
    - ANDROID_ABI=armeabi-v7a

android:
  components:
    - platform-tools
    - tools
    - build-tools-$ANDROID_BUILD_TOOLS_VERSION
    - android-$ANDROID_BUILD_TOOLS_VERSION
    # For Google Maps API v1
    - addon-google_apis-google-$ANDROID_API_LEVEL
    # Google Play Services
    - extra-google-google_play_services
    # Support library
    - extra-android-support
    # Latest artifacts in local repository
    - extra-google-m2repository
    - extra-android-m2repository
    # Specify at least one system image,
    - sys-img-armeabi-v7a-android-$ANDROID_BUILD_TOOLS_VERSION

before_script:
  # Create and start emulator
  - echo no | android create avd --force -n test -t "Google Inc.:Google APIs:"$ANDROID_API_LEVEL --abi $ANDROID_ABI
  - emulator -avd test -no-skin -no-audio -no-window &

script:
  - ./wait_for_emulator
  - ./gradlew connectedCheck -PdisablePreDex

My build.gradle is here.

Again, the only thing I changed in the new Travis build is the API level and build tools level.

Sean Barbeau
  • 11,496
  • 8
  • 58
  • 111

2 Answers2

24

Apparently the names of the Google APIs system images and ABI parameters changed:

  • ABI = armeabi-v7a to google_apis/armeabi-v7a
  • System image = sys-img-armeabi-v7a-android-21 to sys-img-armeabi-v7a-addon-google_apis-google-21

I fixed this by updating both my ANDROID_ABI variable and component name for the system image - new values are:

- ANDROID_ABI=google_apis/armeabi-v7a
...
# Specify at least one system image,
- sys-img-armeabi-v7a-addon-google_apis-google-$ANDROID_API_LEVEL

Here's the whole section in context:

env:
  global:
    - ANDROID_API_LEVEL=21
    - ANDROID_BUILD_TOOLS_VERSION=21.1.2
    - ANDROID_ABI=google_apis/armeabi-v7a

android:
  components:
    - platform-tools
    - tools
    - build-tools-$ANDROID_BUILD_TOOLS_VERSION
    - android-$ANDROID_API_LEVEL
    # For Google Maps API v1
    - addon-google_apis-google-$ANDROID_API_LEVEL
    # Google Play Services
    - extra-google-google_play_services
    # Support library
    - extra-android-support
    # Latest artifacts in local repository
    - extra-google-m2repository
    - extra-android-m2repository
    # Specify at least one system image
    - sys-img-armeabi-v7a-addon-google_apis-google-$ANDROID_API_LEVEL

After these changes, it builds successfully.

EDIT Sept 12th, 2016

Apparently there was another change in mid-2016 that causes this same problem. For example, here's a failed build with the same error message.

The following changes were needed to fix Travis builds:

  • Add separate ANDOID_TAG ABI tag variable
  • Duplicate tools to get the new repository-11.xml and to install Android SDK tools 25.1.x
  • Change system image names to match new Android SDK
  • Change emulator start command to use new ABI tag variable to specify Google APIs

For example:

- ANDROID_ABI=google_apis/armeabi-v7a

...changed to:

- ANDROID_ABI=armeabi-v7a

- ANDROID_TAG=google_apis

- tools needs to be listed twice.

The system images:

- sys-img-armeabi-v7a-addon-google_apis-google-23

- sys-img-armeabi-v7a-addon-google_apis-google-23

...needed to be changed to:

- sys-img-armeabi-v7a-google_apis-23

- sys-img-armeabi-v7a-google_apis-23

The line to start the emulator changed from:

- echo no | android create avd --force -n test -t "Google Inc.:Google APIs:23" --abi $ANDROID_ABI

...to:

- echo no | android create avd --force -n test -t "android-23" --abi $ANDROID_ABI --tag $ANDROID_TAG

See this commit for a changeset of what needs to be changed, this file for a fully working script, and see https://github.com/travis-ci/travis-ci/issues/6122#issuecomment-239073557 for details.

Thanks to @Ardock for the fixes!

EDIT Nov 28th, 2016

I seems that API Level 23 emulator is currently not working on Travis with the above - android create avd --force -n test -t "android-23" --abi "armeabi-v7a" --tag "google_apis" yields the error Error: Invalid --tag google_apis for the selected target. For more details see https://github.com/OneBusAway/onebusaway-android/issues/720.

Also, apparently ARM ABIs aren't currently available for API Level 24 or 25 (Android 7.1.1) - see this issue for a screenshot of SDK Manager.

Posted issue to Android Studio Google+ Community here: https://plus.google.com/+SeanBarbeau/posts/adNGGtJFhvi?sfc=true

Sean Barbeau
  • 11,496
  • 8
  • 58
  • 111
  • I'm afraid your fix from EDIT Sept 12th is not working anymore: `android create avd --force -n test -t "android-23" --abi "armeabi-v7a" --tag "google_apis"` yields **Error: Invalid --tag google_apis for the selected target.**. – PLNech Dec 01 '16 at 15:57
  • Thanks! Yes, I haven't been able to get API 23-25 working in the last few days. I just updated the answer to reflect this. If you figure it out let me know! – Sean Barbeau Dec 01 '16 at 16:11
  • I think it is due to the SDK webservice's response missing the correct system images: https://code.google.com/p/android/issues/detail?id=228113 Sadly, the issue is categorised as `Priority-Small` so I don't have high hopes on this ticket to raise attention. I don't tweet, but maybe if you reach out to @android they will fix this SDK issue? – PLNech Dec 01 '16 at 17:02
  • 1
    Yes, I can do that. Looks like the new issue hasn't been triaged yet, so maybe there is hope... – Sean Barbeau Dec 01 '16 at 18:07
  • 1
    I've had more success posting to Google+ in the past, so I tried that here - https://plus.google.com/+SeanBarbeau/posts/adNGGtJFhvi?sfc=true. In my experience Android Studio team is more responsive than any other Android group, so I tried that community first. – Sean Barbeau Dec 02 '16 at 03:30
  • @SeanBarbeau, thanks so much for your answer, but I need your help, I have somehow a similar problem [My Question](https://stackoverflow.com/questions/53432679/error-invalid-abi-armeabi-v7a-for-the-selected-target) – Lutaaya Huzaifah Idris Nov 22 '18 at 15:23
10

A little late to the party but this still remains an issue and the only way I have found around it is by using android-22 on the emulator.

This is my .travis.yml for reference.

language: android
notifications:
  email: false
before_install:
  - sudo apt-get -qq update
  - sudo apt-get install -y pax
env:
  global:
  - ANDROID_API_LEVEL=26
  - ANDROID_BUILD_TOOLS_VERSION=26.0.1
  - ANDROID_EMU_API_LEVEL=22
  - ANDROID_ABI=armeabi-v7a
  - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default)
  - QEMU_AUDIO_DRV=none # Remove audio
cache:
  directories:
    - $HOME/.gradle/caches/
    - $HOME/.gradle/wrapper/
    - $HOME/.android/build-cache
android:
  components:
  - tools
  - platform-tools
  - tools
  - build-tools-$ANDROID_BUILD_TOOLS_VERSION
  - android-$ANDROID_API_LEVEL
  - android-$ANDROID_EMU_API_LEVEL
  - extra-android-support
  - sys-img-$ANDROID_ABI-google_apis-$ANDROID_EMU_API_LEVEL
before_script:
  - echo -e "Host github.com\n\tHostName github.com\n\tUser git\n\tIdentityFile ~/.ssh/id_travisci\n" >> ~/.ssh/config
  - echo no | android create avd --force -n test -t android-$ANDROID_EMU_API_LEVEL --abi google_apis/$ANDROID_ABI
  - emulator -avd test -no-window &
  - android-wait-for-emulator
  - adb shell input keyevent 82 &
script:
  - ./gradlew clean installDebug
  - ./gradlew check
  - ./gradlew testDebugUnitTest
  - ./gradlew connectedDebugAndroidTest
Philippe Fanaro
  • 6,148
  • 6
  • 38
  • 76
Pants
  • 2,563
  • 1
  • 20
  • 34
  • am facing a problem similar to this question but I need your help [My Question](https://stackoverflow.com/questions/53432679/error-invalid-abi-armeabi-v7a-for-the-selected-target) – Lutaaya Huzaifah Idris Nov 22 '18 at 15:21