2015-12-04 16 views
1

我有一個用例,其中兩個設備可以通信(peer-2-peer)休息。運行兩個android模擬器的Travis-CI

我想在Travis-CI上測試這個用例。該Travis-CI android guide指向一個example project

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的?

回答

1

更新

我發現以前的實驗:

Build 599: Test wear experiment (6-7 minutes)

Build 600: Test two emulators simultaneously without boot-anim (6-7 minutes)

Build 601: Test two emulators simultaneously with boot-anim (10-15 minutes)

上回應:基於構建605

我在一年前嘗試過這種可能性(android + wear),但我不記得結果。這取決於機器(使用sudo: false和容器基礎結構,更新的機器)和腳本(避免同時運行繁重的任務,例如在創建其中一個仿真器時下載依賴項)。

我在谷歌搜索我的實驗,發現這個承諾:

https://travis-ci.org/ardock/iosched/jobs/44038271 https://github.com/ardock/iosched/commit/88838ef1694b034f12b6ae4dc78615e8302689bd

更新compileSdkVersion和targetSdkVersion至21

更新wait_for_emulator.sh支持多個模擬器 同時。添加ANDROID_SERIAL env變量以支持使用adb/gradle的多個 模擬器。使用android-wear-20 創建第二個AVD作爲默認目標。啓動第二個仿真器,用於安卓戴爾 設備。在使用 adb/gradle命令時,添加before_script邏輯以在模擬器之間切換。添加可選的$ {WEAR_PKGS: - }變量以支持 特定的android-wear-21更新。添加新的構建矩陣作業,允許 失敗並使用android-wear-21。

如果定義了ANDROID_SERIAL,則命令會爲speficic設備運行。如果 ANDROID_SERIAL未定義或爲空,則會發生在所有連接的設備上運行的默認行爲。如果找不到目標DSN,則會拋出異常 。請參閱 https://android-review.googlesource.com/#/c/108985/

目前我們不需要第二個仿真器,但可以在將來使用 。結合ANDROID_SERIAL和項目名稱,我們可以使用Gradle爲特定項目選擇 特定任務。

我認爲這是可能的限制。例如,你將需要刪除adb -e國旗在等待仿真器腳本像here並與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