如何使用Travis CI上的构建矩阵设置运行API 25的模拟器?

fra*_*nch 11 java continuous-integration android travis-ci

我正在尝试设置Travis CI,以便它在运行API 25的模拟器上运行检测测试.Travis在API 4/10/19上运行测试完成,但无法启动API 25的模拟器,并显示以下消息:

$ echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI
Valid ABIs: no ABIs.
Error: Invalid --abi armeabi-v7a for the selected target.
Run Code Online (Sandbox Code Playgroud)

输出android list targets显示API 19仿真器具有Tag/ABI,而API 25仿真器不具有:

id: 7 or "android-19"
     Name: Android 4.4.2
     Type: Platform
     API level: 19
     Revision: 4
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
 Tag/ABIs : default/armeabi-v7a

id: 11 or "android-25"
     Name: Android 7.1.1
     Type: Platform
     API level: 25
     Revision: 3
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
 Tag/ABIs : no ABIs.
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题,以便API 25模拟器启动并运行测试?

完整.travis.yml文件如下:

language: android

android:
  components:
    - tools
    - platform-tools
    - tools # appears twice as per Travis docs
    - build-tools-23.0.1
    - build-tools-25.0.2
    - android-4
    - android-10
    - android-19
    - android-23
    - android-25
    - extra-android-m2repository
    - sys-img-armeabi-v7a-android-25

env:
  matrix:
    - ANDROID_TARGET=android-4 ANDROID_ABI=armeabi
    - ANDROID_TARGET=android-10 ANDROID_ABI=armeabi
    - ANDROID_TARGET=android-19 ANDROID_ABI=armeabi-v7a
    - ANDROID_TARGET=android-25 ANDROID_ABI=armeabi-v7a

before_script:
  # Create and start emulator
  - android list targets
  - jdk_switcher use oraclejdk8
  - echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI
  - emulator -avd test -no-skin -no-audio -no-window &
  - adb wait-for-device
  - while [[ `adb shell pm path android` == 'Error'* ]]; do sleep 2; done
  - adb shell input keyevent 82 &

script: ./gradlew --info connectedAndroidTest

sudo: false
Run Code Online (Sandbox Code Playgroud)

alb*_*elu 9

注意:模拟器版本26.1.4+版本可以引入或修复错误.如果需要可重现的ci构建,最好的选择是通过android组件下载所需的sdk-tools版本.

注:模拟器版本26.1.3是这里包括有趣的修复.我现在正忙着修改我的答案:

在此输入图像描述

这里使用模拟器26.1.2的相关问题.重新启动像我这样的最后一个构建使用26.1.3并祈祷,绿色

我正在尝试设置Travis CI,以便它在运行API 25的模拟器上运行检测测试.Travis在API 4/10/19上运行测试完成,但无法启动API 25的模拟器...

我该如何解决这个问题,以便API 25模拟器启动并运行测试?

更新:我确认Android Studio中也缺少用于API 23,25和26的ARM ABI,因此:

  • 这不是Travis-ci问题.我在本地复制它,如下图所示.

  • 您可以将ARM ABI用于API-24.我分叉你的项目,它在build#6(下图)中工作.

  • 您可以将API API图像用于API-25,我将在下面使用新的解释sdkmanager:1

  • 您可以使用传统工具来使用谷歌API的图像API-25,如果你知道IMG名称:1,2,3

  • 我们需要向Google或其他人询问为何缺少这些API的ARM ABI.

更新: 已经向Google报告了相关的错误并在此进行了讨论,请注意:

出于某种原因,它被标记为仅在Windows上可用.我不确定这是ADRT本身的问题还是这个软件包的配置,但从快速看看它似乎可能是adrt本身的一个问题.

在此输入图像描述

在此输入图像描述


我不确定api-25问题是否相关,但我希望它可以结合多种解决方案:

  • 使用系统映像google_apis来简化构建矩阵并避免丢失ABI.
  • 使用最近的Sdk Tools 新增sdkmanageravdmanager必需的.
  • 使用新的可信赖的图像,包括这些工具来简化特拉维斯-CI配置,或者选择使用dist: precise作为解释在这里.

请参阅以下链接,使用包含Api-25仿真器的构建矩阵来处理样本.


我通过Android Studio在macbook上更新了api 23系统映像一次,并且我的计算机不支持关于新版本的消息,所以我使用了google_apis.

在这里为Ashish Pathak评论的问题提供了一个可能的解决方案(我也是ardock).

我需要更新我的响应以支持新SDK工具附带的新Travis-ci图像.

新的预安装Sdk Tools将简化解决方案并减小YAML文件的大小.


正如2017年6月19日Carmen Andoh和Dominic Jodoin撰写的博客文章所述:

所有Ubuntu Trusty 14.04映像都有更新

新一代Trusty映像已经可以在生产中使用,可以通过在.travis.yml文件中添加group:edge来使用:

sudo: required
dist: trusty

group: edge  # Add this
Run Code Online (Sandbox Code Playgroud)

而作为解释在这里:

作为更多信息,这个新的Android图像附带:

Android SDK 25.2.3 build-tools-25.0.2

新的sdkmanager工具 - 一个命令行工具,允许您查看,安装,更新和卸载Android SDK的软件包.替换以前的android工具,请参阅 https://developer.android.com/studio/tools/help/android.html

此外,新的Android图像应该是复古兼容的.查看可在.travis.yml文件中指定的Android SDK组件的完整列表,包括build-tools-26.0.0-preview.

但他们没有使用新的avdmanager,我会在本周末尝试修复它.

或者,您可以通过添加使用以前的图像dist: precise.


以下几行是我对相关问题的回答的一部分:在图像更新之前:

使用约束布局codelab存储库的完整工作示例,适用于Android API级别22到25:

另外两个样本使用sdkmanageravdmanager:

参考

使用Gradle自动下载缺失软件包相关的官方文档

新的仿真器选项进行了解释开始通过命令行模拟器

avdmanager 这里解释android avdSDK工具版本25.3.0以来的替换

sdkmanager 此处解释还增强了从命令行查看和接受所有许可证