2015-02-26 11 views
9

Sto tentando di aggiornare un progetto Android utilizzando l'SDK API di livello 19 e di creare strumenti per il più recente livello 21 dell'API, comprese le API di Google. Prima di questo aggiornamento era tutto a posto su Travis (ad esempio, vedere this build)."Non valido --abi armeabi-v7a per la destinazione selezionata" con le API di Google

Quando eseguo con il nuovo livello di API vedo il seguente errore:

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 

Vedere this build per l'uscita completa Travis.

Ecco la mia .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 

mio build.gradle è here.

Ancora una volta, l'unica cosa che ho modificato nella nuova versione di Travis è il livello API e il livello degli strumenti di creazione.

risposta

17

A quanto pare i nomi delle immagini del sistema di Google API e dei parametri di ABI cambiati:

  • ABI = armeabi-v7a-google_apis/armeabi-v7a
  • Sistema image = sys-img-armeabi-v7a-android-21 al sys-img-armeabi-v7a-addon-google_apis-google-21

Ho fissato questo aggiornando sia il mio nome di variabile e componente ANDROID_ABI per l'immagine di sistema: i nuovi valori sono:

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

Ecco l'intera sezione nel contesto:

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 

Dopo questi cambiamenti, builds successfully.

EDIT 12 settembre 2016

A quanto pare c'è stato un altro cambiamento a metà del 2016 che causa questo stesso problema. Ad esempio, here's a failed build con lo stesso messaggio di errore.

Le seguenti modifiche sono stati necessari per riparare Travis costruisce:

  • Aggiungi separati ANDOID_TAG ABI tag variabili
  • strumenti duplicati per ottenere il nuovo repository-11.xml e per installare strumenti SDK Android 25.1.x
  • immagine Cambiare il sistema nomi per abbinare il nuovo SDK Android
  • Modificare il comando di avvio dell'emulazione per utilizzare la nuova variabile di tag ABI per specificare le API di Google

Ad esempio:

- ANDROID_ABI=google_apis/armeabi-v7a

...cambiato in:

- ANDROID_ABI=armeabi-v7a

- ANDROID_TAG=google_apis

- tools ha bisogno di essere elencati due volte.

Le immagini di sistema:

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

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

... doveva essere cambiato in:

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

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

La linea per avviare l'emulatore modificata da:

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

... a:

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

Vedi this commit per un insieme di modifiche di ciò che deve essere cambiato, this file per un completamente funzionante script e vedere https://github.com/travis-ci/travis-ci/issues/6122#issuecomment-239073557 per i dettagli.

Grazie a @Ardock per le correzioni!

EDIT 28 novembre 2016

mi sembra che API Livello 23 emulatore non sta attualmente lavorando Travis con quanto sopra - android create avd --force -n test -t "android-23" --abi "armeabi-v7a" --tag "google_apis" cede l'errore Error: Invalid --tag google_apis for the selected target. Per ulteriori dettagli vedere https://github.com/OneBusAway/onebusaway-android/issues/720.

Inoltre, apparentemente gli ABI ARM non sono attualmente disponibili per il livello API 24 o 25 (Android 7.1.1) - vedere this issue per uno screenshot di SDK Manager.

problema Pubblicato da Android Studio Google+ Community qui: https://plus.google.com/+SeanBarbeau/posts/adNGGtJFhvi?sfc=true

+0

temo il fix da EDIT 12 settembre non funziona più: 'Android creare AVD --force -n prova -t "android-23" --abi --tag "armeabi-V7A"" google_apis "' yields ** Errore: non valido --tag google_apis per il target selezionato. **. – PLNech

+0

Grazie! Sì, non sono stato in grado di utilizzare API 23-25 ​​negli ultimi giorni. Ho appena aggiornato la risposta per riflettere questo. Se lo capisci, fammi sapere! –

+0

Penso che sia dovuto alla risposta del webservice dell'SDK che manca le immagini di sistema corrette: https://code.google.com/p/android/issues/detail?id=228113 Purtroppo il problema è classificato come Priority-Small "quindi non ho grandi speranze su questo biglietto per attirare l'attenzione. Non faccio tweet, ma forse se raggiungi @android risolveranno questo problema dell'SDK? – PLNech

5

Un po 'tardi alla festa, ma questo rimane ancora un problema e l'unico modo che ho trovato attorno ad esso è quello di utilizzare Android-22 sull'emulatore.

Questo è il mio .travis.yml come riferimento.

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 
Problemi correlati