我尝试更新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级别和构建工具级别。
答案 0 :(得分:21)
显然,Google API系统映像和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
完成这些更改后,builds successfully。
编辑2016年9月12日
显然2016年中期还有另一个变化导致了同样的问题。例如,here's a failed build具有相同的错误消息。
修复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
需要列出两次。
系统图片:
- 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 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) - 有关SDK Manager的屏幕截图,请参阅this issue。
将问题发布到Android Studio Google+社区: https://plus.google.com/+SeanBarbeau/posts/adNGGtJFhvi?sfc=true
答案 1 :(得分:8)
派对有点晚了,但这仍然是一个问题,我发现它的唯一方法就是在模拟器上使用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