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

GitLab CI/CD中无法启动Android插桩测试问题求助

解决Android插桩测试找不到模拟器的问题

核心问题分析

从错误信息和配置来看,存在两个关键问题:

  1. 模拟器启动后未被正确检测到,导致connectedDebugAndroidTest任务提示无连接设备
  2. 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:分配足够内存,避免模拟器卡顿崩溃

验证要点

  1. 观察CI日志中adb devices的输出,确认模拟器状态为device而非offline
  2. 检查android-wait-for-emulator.sh的日志,确保输出“模拟器已就绪!”后再执行测试
  3. 确认build_job阶段生成了debug和debugAndroidTest相关的APK文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:14:51