web-dev-qa-db-ja.com

GoogleAPIで「選択したターゲットに対して無効な--abiarmeabi-v7a」

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レベルとビルドツールレベルだけです。

17
Sean Barbeau

どうやらGoogleAPIシステムイメージの名前とABIパラメータが変更されました:

  • 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 SDK)に一致するようにシステムイメージ名を変更します
  • 新しいABIタグ変数を使用してGoogleAPIを指定するようにエミュレータの開始コマンドを変更します

例えば:

- 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

22
Sean Barbeau

パーティーに少し遅れましたが、これはまだ問題であり、私がそれを回避する唯一の方法は、エミュレーターで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
9
Pants