"Invalid --abi armeabi-v7a for the selected target" 具有 Google API

"Invalid --abi armeabi-v7a for the selected target" with Google APIs

我正在尝试将 Android 项目从使用 API Level 19 SDK 和构建工具更新到最新的 API Level 21,包括 Google API秒。在此更新之前,Travis 上的一切 运行 都很好(例如,参见 this build)。

当我 运行 使用新的 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 输出,请参阅 this build

这是我的。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 是 here

同样,我在新 Travis 构建中唯一改变的是 API 级别和构建工具级别。

显然 Google APIs 系统映像和 ABI 参数的名称已更改:

  • ABI = armeabi-v7agoogle_apis/armeabi-v7a
  • 系统映像 = sys-img-armeabi-v7a-android-21sys-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

经过这些更改后,builds successfully

编辑 2016 年 9 月 12 日

显然,2016 年年中的另一个变化导致了同样的问题。例如,here's a failed build 具有相同的错误消息。

修复 Travis 构建需要进行以下更改:

  • 添加单独的 ANDOID_TAG ABI 标签变量
  • 复制工具以获取新的 repository-11.xml 并安装 Android SDK 工具 25.1.x
  • 更改系统映像名称以匹配新的 Android SDK
  • 更改模拟器启动命令以使用新的 ABI 标记变量来指定 Google APIs

例如:

- ANDROID_ABI=google_apis/armeabi-v7a

...更改为:

- ANDROID_ABI=armeabi-v7a

- ANDROID_TAG=google_apis

- tools需要列出两次。

系统镜像:

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

感谢@Ardock 的修复!

编辑 2016 年 11 月 28 日

我似乎 API Level 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/720

此外,显然 ARM ABI 当前不适用于 API 级别 24 或 25 (Android 7.1.1) - 请参阅 this issue 获取 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