AndroidプロジェクトをAPIレベル19SDKの使用から更新し、ツールをGoogle APIを含む最新のAPIレベル21にビルドしようとしています。この更新前は、Travisですべてが正常に実行されていました。 (たとえば、 このビルド を参照してください)。
新しいAPIレベルで実行すると、次のエラーが表示されます。
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
Travisの完全な出力については、 このビルド を参照してください。
これが私の.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
私のbuild.gradleは ここ です。
繰り返しますが、新しいTravisビルドで変更したのは、APIレベルとビルドツールレベルだけです。
どうやらGoogleAPIシステムイメージの名前とABIパラメータが変更されました:
armeabi-v7a
からgoogle_apis/armeabi-v7a
sys-img-armeabi-v7a-Android-21
からsys-img-armeabi-v7a-addon-google_apis-google-21
システムイメージのAndroid_ABI
変数とコンポーネント名の両方を更新することでこれを修正しました。新しい値は次のとおりです。
- Android_ABI=google_apis/armeabi-v7a
...
# Specify at least one system image,
- sys-img-armeabi-v7a-addon-google_apis-google-$Android_API_LEVEL
これがコンテキストのセクション全体です:
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
これらの変更後、それは 正常にビルドされます 。
2016年9月12日編集
どうやら、これと同じ問題を引き起こす別の変更が2016年半ばにありました。たとえば、 これは失敗したビルドです 同じエラーメッセージが表示されます。
Travisビルドを修正するには、次の変更が必要でした。
ANDOID_TAG ABI
タグ変数を追加しますrepository-11.xml
を取得し、Android SDKツール25.1.xをインストールするためのツールを複製します例えば:
- Android_ABI=google_apis/armeabi-v7a
...に変更:
- Android_ABI=armeabi-v7a
- Android_TAG=google_apis
- tools
は2回リストする必要があります。
システムイメージ:
- sys-img-armeabi-v7a-addon-google_apis-google-23
- sys-img-armeabi-v7a-addon-google_apis-google-23
...次のように変更する必要があります:
- sys-img-armeabi-v7a-google_apis-23
- sys-img-armeabi-v7a-google_apis-23
エミュレータを起動する行が次のように変更されました。
- echo no | Android create avd --force -n test -t "Google Inc.:Google APIs:23" --abi $Android_ABI
...に:
- echo no | Android create avd --force -n test -t "Android-23" --abi $Android_ABI --tag $Android_TAG
変更が必要な変更セットについては this commit を、完全に機能するスクリプトについては this file を、 https://github.com/travis)を参照してください。 -ci/travis-ci/issues/6122#issuecomment-239073557 詳細については。
修正してくれた@Ardockに感謝します!
編集2016年11月28日
APIレベル23エミュレーターは現在上記のTravisで動作していないようです-Android create avd --force -n test -t "Android-23" --abi "armeabi-v7a" --tag "google_apis"
はエラーを生成しますError: Invalid --tag google_apis for the selected target.
詳細については https://github.com/OneBusAway/onebusaway- Android/issues/72 。
また、どうやらARM ABIは現在APIレベル24または25(Android 7.1.1)では利用できません-SDKマネージャーのスクリーンショットについては この問題 を参照してください。
Android Studio Google+コミュニティはこちら: https://plus.google.com/+SeanBarbeau/posts/adNGGtJFhvi?sfc=true
パーティーに少し遅れましたが、これはまだ問題であり、私がそれを回避する唯一の方法は、エミュレーターでAndroid-22を使用することです。
これは参考のために私の.travis.ymlです。
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