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

Android Things项目Gitlab CI配置问题:模拟器无法被识别

解决GitLab CI中Android模拟器无法被等待脚本识别的问题

我太懂这种糟心的情况了——明明看着模拟器启动了,但CI脚本就是卡在等待环节过不去,这在无图形化的CI环境里真的很常见,主要是旧的等待脚本逻辑跟不上新版本Android工具,加上模拟器在无头环境下的启动状态和本地不一样。结合你的配置,给你几个针对性的解决办法:

1. 替换为更可靠的模拟器等待脚本

你当前用的Travis旧版等待脚本,检测逻辑对新版本模拟器的兼容性不好。直接创建一个新的android-wait-for-emulator脚本,内容如下:

#!/bin/bash
set +e

boot_completed=""
fail_counter=0
timeout=300

until [[ "${boot_completed}" =~ "1" ]]; do
    boot_completed=$(adb -e shell getprop sys.boot_completed 2>&1)
    if [[ "${boot_completed}" =~ "device offline" ]]; then
        echo "Emulator is offline, retrying..."
        fail_counter=$((fail_counter + 1))
        if [[ ${fail_counter} -gt ${timeout}/10 ]]; then
            echo "Timeout: Emulator failed to come online within ${timeout} seconds"
            exit 1
        fi
    fi
    sleep 10
done

echo "Emulator has finished booting, ready for tests"

然后执行chmod +x android-wait-for-emulator赋予执行权限,这个脚本直接检测系统启动完成的核心属性,比原来的adb get-state检测更准确。

2. 调整模拟器启动参数优化启动状态

你的启动参数里有些设置可能导致模拟器卡在非就绪状态,修改成以下参数:

android-sdk-linux/tools/emulator -verbose -avd test -no-window -no-audio -gpu swiftshader_indirect -no-snapshot -no-snapshot-save -wipe-data &
  • 去掉了-no-accel:swiftshader_indirect已经是软件渲染模式,-no-accel可能干扰启动流程
  • 增加-no-snapshot-save和-wipe-data:确保每次启动都是干净的全新状态,避免快照残留问题
  • 保留-no-window和-no-audio适配CI无头环境

3. 增加adb连接的容错处理

有时候模拟器进程启动了,但adb还没建立有效连接,在等待脚本前加上这几步:

# 给模拟器足够的启动时间
sleep 15
# 重启adb服务确保连接正常
adb kill-server
adb start-server
# 确认adb能识别到模拟器
adb devices

4. 检查SDK工具与系统镜像的兼容性

你当前使用的SDK Tools版本(27.0.1)和Android 27系统镜像可能存在适配问题。建议升级到更稳定的新版Command Line Tools:

  1. 替换原有的SDK Tools下载步骤,改为下载最新的Android Command Line Tools
  2. 解压后将其放置到android-sdk-linux/cmdline-tools/latest目录下
  3. 后续的sdkmanager命令路径改为android-sdk-linux/cmdline-tools/latest/bin/sdkmanager

5. 优化测试前的确认步骤

在等待脚本执行完成后,先确认模拟器状态再执行解锁和测试:

./android-wait-for-emulator
# 确认模拟器状态正常
adb get-state
# 执行解锁操作
adb shell input keyevent 82
# 等待解锁完成
sleep 5
# 启动测试
./gradlew connectedAndroidTest

你可以先试试前两个方案——替换等待脚本和调整启动参数,这两个是解决这类问题最有效的办法。如果还是不行,再逐步排查SDK版本和adb连接的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:42:23