在Jenkins运行Android模拟器遇超时错误,求启动等待完成脚本
解决Jenkins中Android模拟器启动超时问题并等待启动完成的脚本
错误原因分析
你遇到的TCP:5868连接超时问题,核心是-report-console tcp:5868,max=60设置的超时时间过短,Jenkins环境资源受限导致模拟器启动速度慢,触发控制台连接超时进而关闭模拟器。同时原命令没有内置等待模拟器完全启动的逻辑,无法确保后续操作正常执行。
改进后的启动脚本(Bash)
以下脚本会清理残留进程、启动模拟器并可靠等待其完全就绪,适配Jenkins运行环境:
#!/bin/bash # 1. 清理残留的模拟器和adb进程,避免端口占用或冲突 pkill -f emulator || true adb kill-server # 2. 启动模拟器,后台运行并优化启动参数 echo "启动Android模拟器..." emulator/emulator \ -skin 1080x1920 \ -ports 5784,5785 \ -prop persist.sys.language=en \ -prop persist.sys.country=US \ -avd emulatorname \ -wipe-data \ -no-window \ -no-audio \ -no-boot-anim \ -gpu off & # 无GPU硬件时禁用,加快启动(按需移除) EMULATOR_PID=$! # 3. 等待模拟器被adb识别 echo "等待模拟器连接到adb..." adb wait-for-device # 4. 等待系统完全启动(直到boot_completed标记为1) echo "等待Android系统启动完成..." until adb shell getprop sys.boot_completed | grep -m 1 '1'; do sleep 5 done # 5. 可选:解锁模拟器屏幕(适配需要交互的测试场景) adb shell input keyevent 82 echo "模拟器已完全就绪,可执行后续测试任务" # 脚本退出时自动清理模拟器进程 trap "kill $EMULATOR_PID 2>/dev/null; adb kill-server" EXIT
参数调整说明
- 移除
-report-console:改用adb内置命令监控状态,彻底避免TCP连接超时问题 - 添加
-no-audio、-no-boot-anim:减少不必要的资源消耗,加快启动速度 - 添加
-gpu off:Jenkins服务器无GPU硬件时,禁用GPU可避免启动失败(有GPU则移除该参数) - 后台运行模拟器:用
&将进程放入后台,不阻塞脚本执行 - 陷阱处理:脚本退出时自动杀死模拟器进程,避免残留资源占用
可选:保留-report-console的调整方案
如果必须使用控制台报告,可延长超时时间并改用本地套接字避免网络问题:
emulator/emulator ... -report-console unix:/tmp/emulator_console,max=120 ...
内容的提问来源于stack exchange,提问作者droid
相关产品推荐
相关产品推荐

