GitLab CI/CD中无法启动Android插桩测试问题求助
解决Android插桩测试找不到模拟器的问题
核心问题分析
从错误信息和配置来看,存在两个关键问题:
- 模拟器启动后未被正确检测到,导致
connectedDebugAndroidTest任务提示无连接设备 - APMS插件报错找不到Debug环境的Manifest文件,可能干扰测试流程初始化
针对性修复步骤
1. 修复模拟器等待逻辑
当前android-wait-for-emulator.sh脚本存在检测逻辑缺陷,修改为更可靠的版本:
#!/usr/bin/env bash set +e failcounter=0 timeout_in_sec=500 # 先等待模拟器在线 until adb shell echo "ready" >/dev/null 2>&1; do let "failcounter += 5" echo "等待模拟器上线...已等待 $failcounter 秒" if [[ $failcounter -gt $timeout_in_sec ]]; then echo "超时!模拟器未在 $timeout_in_sec 秒内启动" adb devices exit 1 fi sleep 5 done # 再等待启动动画结束 bootanim="" until [[ "$bootanim" =~ "stopped" ]]; do bootanim=$(adb shell getprop init.svc.bootanim 2>&1) echo "启动动画状态: $bootanim" sleep 2 done echo "模拟器已就绪!" exit 0
2. 调整CI脚本执行顺序
必须等待模拟器完全就绪后,再执行adb命令和测试任务,修改instrumentation_tests阶段:
instrumentation_tests: stage: uiTest script: - echo y | sdkmanager --install 'system-images;android-34;google_apis;x86_64' - echo no | avdmanager create avd --force --name testAVD --abi google_apis/x86_64 --package "system-images;android-34;google_apis;x86_64" - export APK_PATH="app/build/outputs/apk/release/app-universal-release.apk" # 启动模拟器并添加优化参数 - emulator -avd testAVD -no-audio -no-window -no-snapshot -no-boot-anim & - chmod +x ./ci/android-wait-for-emulator.sh # 阻塞等待模拟器就绪(关键步骤) - ./ci/android-wait-for-emulator.sh # 此时再执行adb相关操作 - adb devices - adb shell settings put global window_animation_scale 0 - adb shell settings put global transition_animation_scale 0 - adb shell settings put global animator_duration_scale 0 - adb shell input keyevent 82 # 执行插桩测试 - ./gradlew app:connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.apkFile=$APK_PATH - chmod +x ./ci/stop-emulators.sh - ./ci/stop-emulators.sh
3. 修复Manifest文件缺失问题
当前CI只构建了Release包,但插桩测试默认依赖Debug环境,修改build_job阶段同时构建Debug相关产物:
build_job: stage: build script: - ./gradlew clean assembleRelease assembleDebug assembleDebugAndroidTest only: - merge_requests artifacts: paths: - app/build/outputs/
4. 模拟器启动参数优化
给emulator命令添加以下参数,加快启动速度并避免异常:
-no-snapshot:禁用快照,避免启动失败-no-boot-anim:跳过启动动画,减少等待时间-memory 2048:分配足够内存,避免模拟器卡顿崩溃
验证要点
- 观察CI日志中
adb devices的输出,确认模拟器状态为device而非offline - 检查
android-wait-for-emulator.sh的日志,确保输出“模拟器已就绪!”后再执行测试 - 确认
build_job阶段生成了debug和debugAndroidTest相关的APK文件
内容的提问来源于stack exchange,提问作者Vladimir Fisher
相关产品推荐
相关产品推荐

