2015-02-26 9 views
9

Próbuję zaktualizować projekt Androida za pomocą pakietu SDK interfejsu API poziomu 19 i utworzyć narzędzia do najnowszego interfejsu API poziomu 21, w tym interfejsów Google API. Wszystko działo się dobrze na Travisie przed tą aktualizacją (na przykład zobacz this build)."Nieprawidłowy --abi armeabi-v7a dla wybranego celu" z interfejsami API Google

Kiedy biegnę z nowym poziomie API widzę następujący błąd:

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 

Zobacz this build dla pełnej mocy Travis.

Oto mój .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 

Moja build.gradle jest here.

Ponownie, jedyną rzeczą, którą zmieniłem w nowej wersji Travis, jest poziom interfejsu API i poziom narzędzi do budowy.

Odpowiedz

17

Najwyraźniej nazwy obrazów systemu Google API i parametrów ABI zmianie:

  • ABI = armeabi-v7a do google_apis/armeabi-v7a
  • system image = sys-img-armeabi-v7a-android-21 do sys-img-armeabi-v7a-addon-google_apis-google-21

Naprawiłem to, aktualizując zarówno my ANDROID_ABI zmienna i nazwa komponentu dla obrazu systemu - nowe wartości to:

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

Oto cała sekcja w kontekście:

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 

Po tych zmianach, to builds successfully.

EDIT 12 września 2016

Najwyraźniej nastąpiła kolejna zmiana w połowie 2016 roku, który powoduje ten sam problem. Na przykład: here's a failed build z tym samym komunikatem o błędzie.

Następujące zmiany były potrzebne, aby rozwiązać Travis buduje:

  • Dodaj oddzielne ANDOID_TAG ABI Znacznik zmiennych
  • narzędzia duplikatów, aby uzyskać nową repository-11.xml i zainstalować Androida narzędzia SDK 25.1.x
  • Zmień obraz systemu Nazwy pasujące do nowego zestawu SDK Androida
  • Zmiana polecenia uruchomienia emulatora w celu użycia nowej zmiennej znacznika ABI do określenia interfejsów API Google

Na przykład:

- ANDROID_ABI=google_apis/armeabi-v7a

...zmienione na:

- ANDROID_ABI=armeabi-v7a

- ANDROID_TAG=google_apis

- tools potrzeby zostać wymieniony dwukrotnie.

ilustracje systemowe:

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

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

... musiały być zmienione na:

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

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

Linia aby uruchomić emulator zmieniony z:

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

... do:

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

Zobacz this commit dla changeset, co należy zmienić, aby w pełni this file pracy skryptu i zobacz szczegóły: https://github.com/travis-ci/travis-ci/issues/6122#issuecomment-239073557.

Dzięki @Ardock za poprawki!

EDIT 28 listopada 2016

I wydaje się, że poziom API 23 emulator nie jest obecnie pracuje na Travisa z powyższym - android create avd --force -n test -t "android-23" --abi "armeabi-v7a" --tag "google_apis" daje błąd Error: Invalid --tag google_apis for the selected target. po więcej szczegółów patrz https://github.com/OneBusAway/onebusaway-android/issues/720.

Ponadto, najprawdopodobniej ABI ABI nie są obecnie dostępne dla poziomu API 24 lub 25 (Android 7.1.1) - patrz this issue dla zrzutu ekranu Menedżera SDK.

Wysłany problem Android Studio społeczności Google+ tutaj: https://plus.google.com/+SeanBarbeau/posts/adNGGtJFhvi?sfc=true

+0

Obawiam Twój fix od EDIT Sept 12 nie działa już: 'android tworzyć AVD --force -n Test -t "android-23" --abi "armeabi-v7a" --tag" google_apis "' daje ** Błąd: Niepoprawny --tag google_apis dla wybranego celu. **. – PLNech

+0

Dzięki! Tak, nie udało mi się uzyskać interfejsu API 23-25 ​​w ciągu ostatnich kilku dni. Właśnie zaktualizowałem odpowiedź, aby to odzwierciedlić. Jeśli to zrozumiesz, daj mi znać! –

+0

Myślę, że to z powodu odpowiedzi serwera usługi SDK brakuje prawidłowych obrazów systemu: https://code.google.com/p/android/issues/detail?id=228113 Niestety, problem ten został sklasyfikowany jako "Priorytet-mały" "więc nie mam wielkich nadziei na ten bilet, żeby zwrócić na siebie uwagę. Nie tweetuję, ale może jeśli skontaktujesz się z @androidem, naprawią ten problem z SDK? – PLNech

5

Trochę późno do partii, ale to nadal pozostaje problemem, a jedynym sposobem znalazłem wokół niego jest za pomocą android-22 na emulatorze.

To jest mój .travis.yml w celach informacyjnych.

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 
Powiązane problemy