Linux环境Jenkins启动Android模拟器遇快照超时错误的解决咨询
Android模拟器启动失败问题排查与修复
问题描述
在Linux机器的Jenkins环境中执行命令启动Android模拟器:
$ANDROID_HOME/emulator/emulator @pixel_4a_api30 -no-snapshot-load
出现以下错误输出:
INFO | Android emulator version 31.3.14.0 (build_id 9322596) (CL:N/A) emulator: INFO: Found systemPath /opt/android-sdk-linux/system-images/android-30/google_apis_playstore/x86_64/ WARNING | unexpected system image feature string, emulator might not function correctly, please try updating the emulator. ERROR | A snapshot operation for 'pixel_4a_api30' is pending and timeout has expired. Exiting... INFO | Duplicate loglines will be removed, if you wish to see each indiviudal line launch with the -log-nofilter flag.
已尝试删除模拟器目录下的.lock文件但无效,该目录仅存在config.ini和userdata.img;且该AVD由其他用户创建后,被移动到当前Jenkins用户的目录下。
问题原因分析
- AVD跨用户移动引发权限/状态异常:原用户创建的AVD包含快照状态关联信息,移动后当前Jenkins用户可能无完整读写权限,且快照状态标记文件可能丢失或路径失效,触发“快照操作pending”错误。
- 模拟器版本与系统镜像不兼容:警告信息显示系统镜像特性字符串异常,说明当前模拟器版本(31.3.14)与Android 30的系统镜像存在兼容性问题。
修复方案
1. 强制跳过快照启动模拟器
使用完全禁用快照的参数启动,绕过当前的快照pending状态:
$ANDROID_HOME/emulator/emulator @pixel_4a_api30 -no-snapshot -no-snapshot-load -no-snapshot-save
-no-snapshot:完全禁用快照功能-no-snapshot-load:不加载已有快照-no-snapshot-save:退出时不保存快照
2. 修复AVD目录权限
将AVD目录及文件的所有权修改为Jenkins用户(假设Jenkins用户组为jenkins):
chown -R jenkins:jenkins /path/to/pixel_4a_api30.avd/ chown jenkins:jenkins /path/to/pixel_4a_api30.ini
替换/path/to/为实际的AVD存储路径。
3. 更新模拟器版本解决兼容性警告
通过Android SDK Manager更新模拟器到最新版本,确保与Android 30系统镜像匹配:
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --update $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "emulator"
4. 重新创建AVD(终极方案)
如果上述方法无效,直接在Jenkins用户下重新创建同名AVD,避免跨用户移动带来的配置残留:
$ANDROID_HOME/cmdline-tools/latest/bin/avdmanager create avd -n pixel_4a_api30 -k "system-images;android-30;google_apis_playstore;x86_64"
内容的提问来源于stack exchange,提问作者Yuriy Surzhikov
相关产品推荐
相关产品推荐

