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配置:
- 开启KVM硬件加速,在
.travis.yml中新增配置:
sudo: required addons: apt: packages: - qemu-kvm before_install: - sudo adduser $USER kvm
- 优化模拟器启动逻辑,增加启动等待和解锁操作:
# 创建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
- 在测试代码中给所有使用ActivityScenario的测试用例增加1~2秒的初始等待时间,避开生命周期检测的时间差问题。
内容的提问来源于stack exchange,提问作者JJD
相关产品推荐
相关产品推荐

