使用 Google APIs 时选择目标时出现无效的 --abi armeabi-v7a。

17

我试图将一个Android项目从使用API Level 19 SDK和构建工具更新到最新的API Level 21,包括Google APIs。在此更新之前,所有内容在Travis上都很正常运行(例如,请参见此构建)。

当我使用新的API level运行时,我会看到以下错误:

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 级别和构建工具级别。

2个回答

24

显然,Google APIs 系统镜像和 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构建:
- 添加单独的ANDROID_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
- 工具需要列出两次。
系统镜像:
- 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
请查看此提交以了解需要更改的变更集,此文件以获得完全可用的脚本,并参阅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 ABIs目前不可用于API Level 24或25(Android 7.1.1) - 参见this issue以查看SDK Manager的屏幕截图。
在这里发布问题到Android Studio Google+社区: https://plus.google.com/+SeanBarbeau/posts/adNGGtJFhvi?sfc=true

很抱歉,您在9月12日编辑的修复方法已经失效了:android create avd --force -n test -t "android-23" --abi "armeabi-v7a" --tag "google_apis"现在会出现错误:所选目标无效--tag google_apis - PLNech
谢谢!是的,我最近几天一直无法让API 23-25正常工作。我刚刚更新了答案以反映这个问题。如果你有解决方法,请告诉我! - Sean Barbeau
我认为这是由于SDK webservice的响应缺少正确的系统图像所致:https://code.google.com/p/android/issues/detail?id=228113 遗憾的是,该问题被归类为“优先级-小”,因此我对此票据引起注意并不抱有太高的希望。我不会发推特,但也许如果您联系@android,他们会修复这个SDK问题? - PLNech
1
是的,我可以做到。看起来新问题还没有被分类,所以也许还有希望... - Sean Barbeau
1
我过去在Google+上发布的效果更好,所以我在这里尝试了一下 - https://plus.google.com/+SeanBarbeau/posts/adNGGtJFhvi?sfc=true。根据我的经验,Android Studio团队比其他任何Android团队都更具响应性,因此我首先尝试了该社区。 - Sean Barbeau
@SeanBarbeau,非常感谢您的回答,但我需要您的帮助,我遇到了一个类似的问题我的问题 - Lutaaya Huzaifah Idris

10

有点晚了,但这仍然是一个问题,我发现唯一的解决方法是在模拟器上使用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

我遇到了类似于这个问题的困扰,但我需要你的帮助。我的问题链接 - Lutaaya Huzaifah Idris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接