Android 特拉维斯葫芦

Android 特拉维斯葫芦,android,continuous-integration,travis-ci,calabash-android,Android,Continuous Integration,Travis Ci,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/ -

我正试图让葫芦机器人在特拉维斯内部运行。葫芦安卓在我的机器内运行良好,没有任何问题。我有以下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'

有什么想法吗?还是建议?

删除
-无启动动画
选项,
android等待emulator
脚本取决于启动动画,以检测emulator何时准备就绪

这是我推荐的一个很好的解释:

第二步是等待emulator完全启动,这样它就可以 用于运行一些代码。这是最棘手的部分。 特别是对于API级别为11+(在测试时为11-14)的仿真器 写作)

首先,emulator应连接到adb,并将被列为“脱机”。 在此状态下,emulator不接受任何shell命令。什么也没有 可以在这种状态下完成。这部分通常非常稳定,我 尚未看到emulator启动但从未连接到的情况 亚行。当然,如果发生错误,它将无法连接到adb。所以 此处应使用超时来检测异常延迟或挂起

设备的下一个状态变为“设备”状态。这是当设备 正在开机。一旦启动,设备就进入“在线”状态。 这是系统启动和仿真器正常运行的时间 进去

从设备进入“设备”状态的那一刻起,可以使用adb外壳 在设备上执行不同的命令并查询一些有用的 有关其状态的信息

我发现了几个应该跟踪的属性,以便 可靠地检测设备何时准备就绪。第一个属性称为 dev.bootcompled。一旦设备完成此属性的引导 将设置为1

dev.bootcompled为1后,下一个名为sys.boot_的属性完成 应该被跟踪。一旦系统完成,它将被设置为1 引导(通常在发送引导完成的广播时)。这 属性仅在API级别为9或更高的模拟器上设置。8日和 lower此属性从未使用过(也不应被跟踪)

但即使设置了sys.boot_completed,emulator仍然没有准备好 对1。您会注意到,引导动画仍将运行一段时间 (重要)一段时间。只有这样UI才会出现。但是 幸运的是,还有一种方法可以检测到这一事件。为此,我们需要 跟踪init.svc.bootanim属性的值。此属性保持状态 启动动画服务,该服务将在UI出现时立即停止。 换句话说,一旦init.svc.bootanim的值停止,它的 可以安全地假设emulator正在运行并准备好使用

使用
-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"
#最初由拉尔夫·基斯特纳撰写,但被置于公共领域
set+e
bootanim=“”
故障计数器=0
超时时间(以秒为单位)=360
直到[[“$bootanim”=~“停止”];做
bootanim=`adb-e shell getprop init.svc.bootanim 2>&1&`
如果[[“$bootanim”=~”未找到设备“| |”$bootanim”=~”设备脱机”
||“$bootanim”=~“running”]];然后
设“故障计数器+=1”
echo“等待仿真器启动”
如果[$failcounter-gt超时(以秒为单位)];然后
echo“已达到超时($Timeout_in_seconds);无法启动emulator”
出口1
fi
fi
睡眠1
完成
echo“Emulator已准备就绪”

现在我怀疑第一个场景是否有效(我从未使用过葫芦android),但我发现这并不取决于模拟器是否准备就绪:

如果您需要对应用程序进行签名以匹配密钥库,则使用Dimit。 从GitHub文档复制

代替辞职,你也可以考虑复制你的调试。 文件夹的密钥库

apk葫芦android运行必须使用与相同的密钥库进行签名 测试服务器

使用命令:
calabash


要运行测试:
calabash android run deleting
-无启动动画

应用程序无法启动的原因可能有很多。我建议在尝试启动adb logcat时运行它,以查看问题所在