如何使用 Travis CI 上的构建矩阵设置运行 API 25 的模拟器?
我正在尝试设置 Travis CI,以便它在运行 API 25 的模拟器上运行仪器测试.Travis 在 API 4/10/19 上运行测试以完成,但无法启动 API 25 的模拟器,原因如下留言:
$ echo no |android 创建 avd --force -n 测试 -t $ANDROID_TARGET --abi $ANDROID_ABI有效 ABI:无 ABI.错误:所选目标的 --abi armeabi-v7a 无效.
android list targets
的输出显示 API 19 模拟器有 Tag/ABI,而 API 25 模拟器没有:
id: 7 或android-19"名称:安卓4.4.2类型:平台API等级:19修订:4皮肤:HVGA、QVGA、WQVGA400、WQVGA432、WSVGA、WVGA800(默认)、WVGA854、WXGA720、WXGA800、WXGA800-7in标签/ABI:默认/armeabi-v7aid: 11 或android-25"名称:安卓7.1.1类型:平台API级别:25修订:3皮肤:HVGA、QVGA、WQVGA400、WQVGA432、WSVGA、WVGA800(默认)、WVGA854、WXGA720、WXGA800、WXGA800-7in标签/ABI:没有 ABI.
如何解决此问题,以便 API 25 模拟器启动并运行测试?
完整的.travis.yml
文件如下:
语言:安卓安卓:组件:- 工具- 平台工具- tools # 出现两次 Travis 文档- 构建工具-23.0.1- 构建工具-25.0.2- 机器人 4- 机器人 10- 机器人 19- 机器人-23- 机器人 25- 额外的 android-m2 存储库- sys-img-armeabi-v7a-android-25环境:矩阵:- 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-v7abefore_script:# 创建并启动模拟器- 安卓列表目标- jdk_switcher 使用 oraclejdk8- 没有回声 |android 创建 avd --force -n 测试 -t $ANDROID_TARGET --abi $ANDROID_ABI- 模拟器 -avd 测试 -no-skin -no-audio -no-window &- adb 等待设备- while [[ `adb shell pm path android` == 'Error'* ]];睡觉2;完毕- adb shell 输入keyevent 82 &脚本:./gradlew --info connectedAndroidTest须藤:假
解决方案 注意: 模拟器版本 26.1.4+ 版本可以引入或修复错误.如果需要可重复的 ci 构建,最好的选择是通过 android 组件下载所需的 sdk-tools 版本.
注意:模拟器版本 26.1.3
使用模拟器 26.1.2
<小时>我不确定 api-25 问题是否相关,但我希望它可以结合多种解决方案发挥作用:
- 使用带有
google_apis
的系统映像来简化构建矩阵并避免丢失 ABI. - 使用最新的 SDK 工具所需的新
sdkmanager
和avdmanager
. - 使用包含这些工具的新 Trusty 映像来简化 Travis-ci 配置,或者按照说明使用
dist:precision
这里.
请参阅下面的链接,了解使用包含 Api-25 模拟器的构建矩阵的工作示例.
<小时>我通过Android Studio在macbook上更新了一次api 23系统映像,并出现了关于我的计算机不支持新版本的消息,所以我使用了google_apis.
我为 Ashish 评论的 问题提供了一个可能的解决方案Pathak(我也是 ardock)这里.
我需要更新我的回复以支持新 SDK 工具附带的新 Travis-ci 图像.
新的预装 SDK 工具将简化解决方案并减小 YAML 文件的大小.
<小时>正如在这篇博文中宣布的 Carmen Andoh 和 Dominic Jodoin 于 2017 年 6 月 19 日:
<块引用>即将对所有 Ubuntu Trusty 14.04 映像进行更新
新一代的 Trusty 图像已在生产,可以通过在 .travis.yml 中添加 group: edge 来使用文件:
sudo: 必需地区:值得信赖group: edge # 添加这个
正如 这里所解释的:
<块引用>作为更多信息,这个新的 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 映像应该是复古兼容的.查看完整的可以在 中指定的 Android SDK 组件列表.travis.yml 文件,包括 build-tools-26.0.0-preview.
但是他们没有使用新的 avdmanager,我会在这个周末尝试修复它.
或者,您可以通过添加 dist:precision
来使用以前的图像.
以下几行是我对相关问题的回答的一部分:图片更新之前:
使用 Android API 级别 22 的约束布局代码实验室存储库的完整工作示例25:
另外两个使用 sdkmanager
和 avdmanager
的示例:
- Android Maps Utils 库 - Google
- Dexter 库 - Karumi
参考文献
与 使用 Gradle 自动下载缺失包相关的官方文档
新模拟器选项在 从命令行启动模拟器
avdmanager
这里解释 替换android avd
自 SDK 工具版本 25.3.0一个>
sdkmanager
在此解释增强以从命令行查看和接受所有许可证
I am attempting to setup Travis CI so that it runs instrumentation tests on an emulator running API 25. Travis runs the tests to completion on API 4/10/19, but fails to startup the emulator for API 25, with the following message:
$ 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.
The output of android list targets
shows that the API 19 emulator has a Tag/ABI, whereas the API 25 emulator does not:
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.
How can I fix this so that the API 25 emulator launches and runs the tests?
The full .travis.yml
file is as follows:
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
解决方案
Note: emulator version 26.1.4+ versions can introduce or fix bugs. If a reproducible ci build is required, the best option is to download the desired sdk-tools version no via android components.
Note: emulator version 26.1.3 is here including interesting fixes. I'm busy to revise my answer now:
Related issue using emulator 26.1.2 here. Relaunch last build like me to use 26.1.3 and pray, green
I am attempting to setup Travis CI so that it runs instrumentation tests on an emulator running API 25. Travis runs the tests to completion on API 4/10/19, but fails to startup the emulator for API 25...
How can I fix this so that the API 25 emulator launches and runs the tests?
Update: I confirmed that ARM ABIs for APIs 23, 25 and 26 are also missing in Android Studio, so:
It's not a Travis-ci issue. I reproduced it locally as shown in the next image.
You can use ARM ABI for API-24. I forked your project and it worked in build #6 (next image).
You can use Google APIs image for API-25 as I explain below using the new
sdkmanager
: 1You can use Google APIs image for API-25 using legacy tools if you know the img name: 1,2,3
We need to ask to Google or someone else why the ARM ABIs for these APIs are missing.
Update: A related bug was already reported to Google and discussed here, please, star it:
For some reason it's marked as being only available on windows. I'm not sure if this is a problem with ADRT itself or the configuration for this package, but from a quick look it seems like it's probably a problem with adrt itself.
I'm not sure if the api-25 issue is related but I expect that it will work combining several solutions:
- Use system images with
google_apis
to simplify the build matrix and avoid missing ABIs. - Use the new
sdkmanager
andavdmanager
required by the recent Sdk Tools. - Use the new Trusty images including these tools to simplify the Travis-ci configuration or alternatively use
dist: precise
as explained here.
See the links below to working samples using a build matrix that includes Api-25 emulator.
I updated the api 23 system image one time on a macbook via Android Studio and appeared a message about the new version was not supported by my computer, so I use the google_apis one.
I offer a possible solution to the issue commented by Ashish Pathak (I'm also ardock) here.
I need to update my response to support the new Travis-ci images that comes with new SDK tools.
The new pre-installed Sdk Tools will simplify the solution and reduce the YAML file in size.
As announced in this blog post by Carmen Andoh and Dominic Jodoin on 19 Jun 2017:
Updates are coming to all Ubuntu Trusty 14.04 images
This new generation of Trusty images is already available in production and can be used by adding group: edge in your .travis.yml file:
sudo: required
dist: trusty
group: edge # Add this
And as explained here:
As a bit more information, this new Android image comes with:
Android SDK 25.2.3 build-tools-25.0.2
The new sdkmanager tool - a command line tool that allows you to view, install, update, and uninstall packages for the Android SDK. Replaces the previous android tool, see https://developer.android.com/studio/tools/help/android.html
Also, the new Android image should be retro-compatible. See the full list of Android SDK components that can be specified in the .travis.yml file, including build-tools-26.0.0-preview.
But they are not using the new avdmanager, I'll try to fix it this weekend.
Alternatively, you can use the previous images by adding dist: precise
.
The lines below are part of my answer on a related question: prior to the images update:
Full working sample using constraint-layout codelab repository for Android API level 22 to 25:
Two more samples using sdkmanager
and avdmanager
:
- Android Maps Utils library - Google
- Dexter library - Karumi
References
Official documentation related to Auto-download missing packages with Gradle
The new Emulator options are explained in Start the Emulator from the Command Line
avdmanager
explained here replaces android avd
since SDK tools version 25.3.0
sdkmanager
explained here also enhanced to view and accept all licenses from the command line
相关文章