我有一个用例,其中两个设备可以在其余设备上进行通信(对等)。
我想在Travis CI上测试这个用例。Travis CI安卓指南指向一个示例项目:
language: android
jdk: oraclejdk7
env:
matrix:
- ANDROID_TARGET=android-19 ANDROID_ABI=armeabi-v7a
android:
components:
- build-tools-19.0.0
before_script:
# Create and start emulator
- 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
- adb shell input keyevent 82 &
script: ./gradlew connectedAndroidTest
从这个例子中可以看出,我应该能够创建两个AVD。
问题:Travis CI环境是否支持创建和启动两个AVD?
更新
我发现了以前的实验:
构建599:测试磨损实验(6-7分钟)
Build 600:在没有引导动画的情况下同时测试两个模拟器(6-7分钟)
构建601:使用引导动画(10-15分钟)同时测试两个模拟器
以前的响应:基于构建605
一年前我尝试过这种可能性(android+wear),但我不记得结果了。这取决于机器(使用sudo: false
和容器基础结构,更新的机器)和脚本(避免在创建一个模拟器时同时运行繁重的任务,如下载依赖项)。
我在谷歌上搜索了我的实验,发现了这个承诺:
https://travis-ci.org/ardock/iosched/jobs/44038271https://github.com/ardock/iosched/commit/88838ef1694b034f12b6ae4dc78615e8302689bd
将compileSdkVersion和targetSdkVersion更新为21。
更新wait_for_emulator.sh以支持多个模拟器同时添加ANDROID_SERIAL env变量以支持多个使用adb/gradle的模拟器。使用android-wear-20创建第二个AVD默认情况下作为目标。启动第二个android穿戴模拟器装置添加before_script逻辑以在使用时在模拟器之间切换adb/gradle命令。添加可选的${WEAR_PKGS:-}变量以支持具体的21岁以下的男性更新。添加新的构建矩阵作业,允许失败和使用安卓21。
如果定义了ANDROID_SERIAL,则会为特定设备运行命令。这个如果ANDROID_SERIAL未定义或为空。将引发异常如果找不到目标DSN。看见https://android-review.googlesource.com/#/c/108985/
目前,我们不需要第二个模拟器,但在将来结合ANDROID_SERIAL和项目名称,我们可以选择使用Gradle为特定项目执行特定任务。
我认为有限制是可能的。例如,您需要删除等待模拟器脚本中的adb -e
标志,如下所示,并使用ANDROID_SERIAL
变量:
before_install:
- export ANDROID_SERIAL='emulator-5554'
- echo y | android update sdk -u -t platform-tool,tool,extra-android-m2repository,extra-google-m2repository
- echo y | android update sdk -a -u -t ${BUILD_TOOLS},${MOBI_PKGS:-},${WEAR_PKGS:-}
install:
- echo n | android create avd -f -n "${MOBI_NAME:-mobi}" -t "${MOBI_TARGET:-android-21}" -b
"${MOBI_ABI:-armeabi-v7a}" -g "${MOBI_TAG:-default}"
- echo n | android create avd -f -n "${WEAR_NAME:-wear}" -t "${WEAR_TARGET:-android-20}" -b
"${WEAR_ABI:-armeabi-v7a}" -g "${WEAR_TAG:-android-wear}"
- emulator -avd "${MOBI_NAME:-mobi}" -no-skin -no-audio -no-window &
- emulator -avd "${WEAR_NAME:-wear}" -no-skin -no-audio -no-window &
- adb wait-for-device get-serialno
- ./gradlew --version
- ./gradlew clean
- ./gradlew compileDebugSources compileDebugTestSources compileReleaseSources
before_script:
- ./scripts/wait_for_emulator.sh
- adb shell input keyevent 82 &
- adb logcat *:W | tee logcat.log>/dev/null 2>&1 &
- ANDROID_SERIAL='emulator-5556'
- adb wait-for-device get-serialno
- ./scripts/wait_for_emulator.sh
- adb shell input keyevent 82 &
- ANDROID_SERIAL=''
- adb devices -l
script:
- ./gradlew build connectedCheck