Android 特拉维斯葫芦
我正试图让葫芦机器人在特拉维斯内部运行。葫芦安卓在我的机器内运行良好,没有任何问题。我有以下travis.yml: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/ -
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时运行它,以查看问题所在