簡體   English   中英

travis中的calabash-android

[英]calabash-android within travis

我正在嘗試在travis中運行calabash-android。 calabash-android在我的機器上運行正常,沒有任何問題。 我有以下travis.yml:

    language: android
jdk: oraclejdk8
before_cache:
  - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
cache:
  directories:
    - $HOME/.gradle/caches/
    - $HOME/.gradle/wrapper/
    - $HOME/.gradle/daemon
    - $HOME/.gradle/native
env:
  global:
    # wait up to 10 minutes for adb to connect to emulator
    - ADB_INSTALL_TIMEOUT=20
    - SLAVE_AAPT_TIMEOUT=40

android:
  components:
    - platform-tools
    - tools
    - build-tools-23.0.3
    - android-23
    - extra-android-support
    - extra-android-m2repository
    - extra-google-m2repository
    - sys-img-armeabi-v7a-android-23

before_install:
  # install ruby 2.0.0
  - rvm install 2.0.0
  # install calabash-android
  - gem install calabash-android

before_script:
  - echo no | android create avd --force --name test --target android-23 --abi armeabi-v7a
  - emulator -avd test -no-skin -no-audio -no-window -no-boot-anim &
  - android-wait-for-emulator
  - adb shell settings put global window_animation_scale 0 &
  - adb shell settings put global transition_animation_scale 0 &
  - adb shell settings put global animator_duration_scale 0 &
  - adb shell input keyevent 82 & #for unlocking as "powerkey"
  - sleep 3 # give screen some time to become unlocked
  - ./gradlew clean assembleDebug -PdisablePreDex --continue --stacktrace

script:
  - calabash-android resign /home/travis/build/app/build/outputs/apk/app-debug.apk
  - calabash-android run /home/travis/build/app/build/outputs/apk/app-debug.apk

它與功能的第一種情況一起使用,然后在啟動第二種情況時顯示此錯誤:

App did not start (RuntimeError)
 ./features/support/app_life_cycle_hooks.rb:5:in `Before'

有任何想法嗎? 或建議?

刪除-no-boot-anim選項, android-wait-for-emulator腳本取決於啟動動畫來檢測模擬器何時准備就緒。

我建議這是一個很好的解釋: 檢測何時可以使用模擬器

第二步是等待仿真器完全啟動,因此可以用來運行一些代碼。 原來這是最棘手的部分。 尤其適用於API級別為11+(在撰寫本文時為11-14)的仿真器。

首先,仿真器應連接到adb,並將其列為“脫機”。 在這種狀態下,仿真器不接受任何Shell命令。 在這種狀態下什么也做不了。 這部分通常非常穩定,我還沒有看到啟動模擬器但從未連接到adb的情況。 當然,如果發生某些錯誤,它將不會連接到adb。 因此,此處應使用超時來檢測異常延遲或掛起。

下一狀態設備進入“設備”狀態。 這是設備啟動時。 一旦啟動,設備將進入“在線”狀態。 這是系統開始啟動並且模擬器正常運行的時間。

從設備進入“設備”狀態的那一刻起,可以使用adb shell在設備上執行不同的命令並查詢有關其狀態的一些有用信息。

我發現應該跟蹤幾個屬性,以便可靠地檢測設備何時准備就緒。 第一個屬性稱為dev.bootcompleted。 設備完成啟動后,此屬性將設置為1。

在dev.bootcompleted為1之后,應跟蹤下一個名為sys.boot_completed的屬性。 系統完成啟動后,它將立即設置為1(通常是在發送BOOT_COMPLETED廣播時)。 僅在API級別為9或更高的模擬器上設置此屬性。 在8及更低版本中,永遠不會使用(並且不應跟蹤)此屬性。

但是,即使sys.boot_completed設置為1,仿真器仍未准備就緒。您會注意到引導動畫仍將運行一段時間(很長一段時間)。 只有這樣,UI才會出現。 但幸運的是,也有一種方法可以檢測到此事件。 為此,我們需要跟蹤init.svc.bootanim屬性的值。 此屬性保留啟動動畫服務的狀態,該狀態將在出現UI時立即停止。 換句話說, 一旦init.svc.bootanim的值停止,就可以安全地假定模擬器正在運行並可以使用

使用-no-boot-anim可以在模擬器完全啟動之前stopped該值:

# Originally written by Ralf Kistner <ralf@embarkmobile.com>, but placed in the public domain

set +e

bootanim=""
failcounter=0
timeout_in_sec=360

until [[ "$bootanim" =~ "stopped" ]]; do
  bootanim=`adb -e shell getprop init.svc.bootanim 2>&1 &`
  if [[ "$bootanim" =~ "device not found" || "$bootanim" =~ "device offline"
    || "$bootanim" =~ "running" ]]; then
    let "failcounter += 1"
    echo "Waiting for emulator to start"
    if [[ $failcounter -gt timeout_in_sec ]]; then
      echo "Timeout ($timeout_in_sec seconds) reached; failed to start emulator"
      exit 1
    fi
  fi
  sleep 1
done

echo "Emulator is ready"

現在,我由於第一個場景的工作而感到懷疑(我從未使用過calabash-android),但是我看到它並不依賴於仿真器是否准備就緒:

calabash-android-辭職有什么用?

如果您需要對應用程序進行簽名以匹配您的密鑰庫,則使用辭職。 從GitHub文檔復制https://github.com/calabash/calabash-android/wiki/Running-Calabash-Android

除了辭職,您還可以考慮將調試密鑰庫復制到文件夾中。

apk calabash android運行必須使用與測試服務器相同的密鑰庫進行簽名。

使用命令: calabash-android resign <apk>退出您的應用程序。

使用calabash-android build構建測試服務器將構建測試服務器,並使用與您正在測試的應用程序相同的密鑰對其進行簽名。

第二種情況是這樣的:

運行測試

運行測試: calabash-android run <apk>

Calabash-android在執行應用程序時會與您的應用程序一起安裝檢測工具。 我們稱此工具為“測試服務器”。 “測試服務器”具有特殊的權限,允許它在測試期間與您的應用進行非常緊密的交互。 每當您測試新的二進制文件或使用升級版的calabash時,都會構建新的測試服務器。 測試服務器是一種儀器,它將與設備上的應用程序一起運行以執行測試。

在這種情況下,可能還存在其他問題,但在此處刪除-no-boot-anim 修復了相同的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM