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

Azure DevOps管道启动Android19模拟器报tr: not found错误

问题根因

核心报错/system/bin/sh: tr: not found来自模拟器内部的shell环境:Android 19(API 19,对应Android 4.4 KitKat)x86系统镜像做了高度精简,内置的系统shell没有自带tr文本处理工具。
原有流水线的开机等待逻辑把tr -d '\r'的过滤操作放在了传给模拟器执行的shell语句块中,高版本Android系统镜像(比如你测试正常的API 28)内置了tr工具所以可以正常运行,API 19镜像找不到该命令就会持续报错,永远无法完成开机状态判定,导致后续测试步骤无法执行。

流水线调整方案

需要做3处适配修改:

  • 把回车符过滤的逻辑从模拟器侧移到流水线宿主机(macOS运行机)侧执行,不依赖模拟器内置的命令工具
  • 给模拟器启动命令补充老版本镜像兼容参数,避免启动黑屏、GPU渲染异常、音频服务占用导致的卡死问题
  • 拆分开机等待逻辑,先等adb识别设备,再循环校验开机状态,避免老版本模拟器启动过程中adb短暂断连导致流程卡住

替换后的模拟器启动步骤

将原有YAML中Start emulator对应的bash步骤直接替换为以下内容:

- bash: | 
    # 后台启动Android 19模拟器,追加兼容参数
    nohup $ANDROID_HOME/emulator/emulator -avd xamarin_android_emulator \
      -no-snapshot -no-audio -no-boot-anim \
      -gpu swiftshader_indirect -netdelay none -netspeed full \
      > /dev/null 2>&1 &

    # 等待adb服务识别到模拟器设备
    $ANDROID_HOME/platform-tools/adb wait-for-device

    # 开机状态校验逻辑放在宿主机执行,不依赖模拟器内置tr命令
    BOOT_COMPLETED=""
    while [ -z "$BOOT_COMPLETED" ]; do
      sleep 1
      # 拉取开机状态属性,在宿主机侧过滤返回内容中的回车、换行符
      BOOT_COMPLETED=$($ANDROID_HOME/platform-tools/adb shell getprop sys.boot_completed | tr -d '\r\n')
    done

    # 发送按键事件解锁模拟器屏幕
    $ANDROID_HOME/platform-tools/adb shell input keyevent 82

    # 打印当前已连接设备列表确认状态
    $ANDROID_HOME/platform-tools/adb devices

    echo "Emulator started" 
  displayName: 'Start emulator'

异常兜底调整

如果替换上述配置后仍然出现模拟器启动超时的问题,可以在安装系统镜像的步骤中补充安装API 19对应的平台SDK、确认使用兼容版模拟器组件,修改后的镜像安装步骤如下:

- bash: | 
    # 安装AVD镜像及对应版本兼容依赖
    echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install \
      'system-images;android-19;google_apis;x86' \
      'platforms;android-19'
    echo "AVD system-image successfully downloaded and installed." 
  displayName: 'Download and install emulator image'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:57:20