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

如何编写脚本实现通过npm start自动启动Android模拟器,无需手动选择AVD?

可行方案:通过npm脚本自动启动Android模拟器

完全可行,你可以通过以下几种方式实现无需手动选择AVD的自动启动,适配不同场景需求:

方案1:指定固定AVD名称(团队统一环境首选)

如果团队约定使用同名模拟器(比如统一命名为Pixel_6_API_34),直接在package.json的scripts中写死命令即可:

{
  "scripts": {
    "start": "emulator -avd Pixel_6_API_34 && npm run launch-app"
  }
}

这种方式最简单直接,但要求所有克隆项目的成员都创建同名AVD,否则会启动失败。

方案2:自动选取第一个可用AVD(兼容个人自定义环境)

通过脚本自动抓取emulator -list-avds输出的第一个AVD并启动,支持跨平台:

Linux/macOS 用Shell脚本实现

在项目根目录创建start-emulator.sh文件:

#!/bin/bash
# 获取第一个可用AVD名称
AVD_NAME=$(emulator -list-avds | head -n 1)
if [ -z "$AVD_NAME" ]; then
  echo "未找到可用Android模拟器,请先通过AVD Manager创建一个"
  exit 1
fi
# 后台启动模拟器
emulator -avd $AVD_NAME &
# 等待模拟器完全启动(替代固定sleep,更可靠)
until adb shell getprop sys.boot_completed | grep -q 1; do
  sleep 3
done
# 启动你的应用
npm run launch-app

然后在package.json中配置脚本:

{
  "scripts": {
    "start": "chmod +x start-emulator.sh && ./start-emulator.sh"
  }
}

跨平台用Node.js脚本实现

创建start-emulator.js文件:

const { execSync, spawn } = require('child_process');

try {
  // 获取AVD列表并过滤空行
  const avdList = execSync('emulator -list-avds', { encoding: 'utf8' })
    .trim()
    .split('\n')
    .filter(item => item);
  
  if (avdList.length === 0) {
    console.error('未找到可用Android模拟器,请先创建一个AVD');
    process.exit(1);
  }

  const targetAvd = avdList[0];
  console.log(`正在启动模拟器:${targetAvd}`);
  
  // 启动模拟器
  spawn('emulator', ['-avd', targetAvd], { stdio: 'inherit' });
  
  // 等待模拟器就绪后启动应用
  const waitForEmulator = setInterval(() => {
    try {
      const bootStatus = execSync('adb shell getprop sys.boot_completed', { encoding: 'utf8' }).trim();
      if (bootStatus === '1') {
        clearInterval(waitForEmulator);
        spawn('npm', ['run', 'launch-app'], { stdio: 'inherit' });
      }
    } catch (err) {
      // 模拟器未就绪时adb会报错,忽略即可
    }
  }, 3000);
} catch (err) {
  console.error('启动模拟器出错:', err.message);
  process.exit(1);
}

在package.json中配置:

{
  "scripts": {
    "start": "node start-emulator.js"
  }
}

注意事项

  • 确保所有克隆项目的用户已配置Android环境变量,emulator和adb命令可在终端直接执行
  • 建议在项目README中补充说明:需提前创建至少一个Android模拟器,或提供自动创建AVD的辅助脚本(可基于sdkmanager和avdmanager命令实现)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:55:39