You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Travis CI运行Android instrumentation测试报生命周期错误如何解决?

错误根因

你遇到的Activity never becomes requested state ... last lifecycle transition = "PRE_ON_CREATE"错误是androidx.test:core 1.4.0版本的已知兼容性问题,该版本及以上配套的ActivityScenario组件在Android 4.4(API 19)及更低版本系统上无法正确识别Activity生命周期,而你的本地测试设备是Android 11(API 30)不受影响。

修复方案

方案1:降级测试依赖(最便捷)

将Espresso及相关测试依赖降级到兼容API 19的版本,修改模块级build.gradle的androidTest依赖配置:

// 替换原有espresso依赖
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
androidTestImplementation 'androidx.test:core:1.3.0'
androidTestImplementation 'androidx.test:runner:1.3.0'

无需修改其他配置即可直接兼容Android 4.4模拟器。

方案2:更换更高版本模拟器镜像

放弃使用API 19的测试镜像,改用API 21及以上的系统镜像,修改Travis配置中的镜像地址即可:

  • 替换原有镜像配置为system-images;android-21;google_apis;armeabi-v7a
  • Android 5.0及以上系统不存在该兼容性问题,无需修改测试依赖。

方案3:保留API 19镜像且不降级依赖的适配方案

如果你必须在API 19环境下跑测试且不能降级依赖,按以下步骤调整Travis配置:

  1. 开启KVM硬件加速,在.travis.yml中新增配置:
sudo: required
addons:
  apt:
    packages:
      - qemu-kvm
before_install:
  - sudo adduser $USER kvm
  1. 优化模拟器启动逻辑,增加启动等待和解锁操作:
# 创建AVD
echo no | avdmanager create avd -n test_avd -k "system-images;android-19;google_apis;armeabi-v7a" --force
# 后台启动模拟器,关闭无关功能加快启动速度
emulator -avd test_avd -no-audio -no-window -no-boot-anim -gpu off -wipe-data &
# 等待模拟器完全启动
adb wait-for-device
# 循环检测启动完成状态
until adb shell dumpsys window | grep -E 'mCurrentFocus|mFocusedApp' > /dev/null; do sleep 2; done
# 解锁模拟器
adb shell input keyevent 82
  1. 在测试代码中给所有使用ActivityScenario的测试用例增加1~2秒的初始等待时间,避开生命周期检测的时间差问题。

内容的提问来源于stack exchange,提问作者JJD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:36:03