乐于分享
好东西不私藏

这个开源工具,把 iOS 模拟器和 Android 模拟器都塞进了终端里

这个开源工具,把 iOS 模拟器和 Android 模拟器都塞进了终端里

这个开源工具,把 iOS 模拟器和 Android 模拟器都塞进了终端里

相信大家一定遇到过这个问题,你在终端里写代码,突然需要切换到另一个模拟器——比如从 Pixel 7 切到 iPhone 15。

你要做什么?

打开 Android Studio,等它加载,找到 AVD Manager,点击启动。或者打开 Xcode,找到 Simulator,选设备,等它启动。全程鼠标操作,最少要点六下,等候时间不计。

开发者每天要做这件事几十次。没有人觉得这是问题,因为一直都是这样的。

simutil 的作者 Dzung Nguyen Minh 觉得这是问题,然后用 Dart 写了一个 TUI 工具,把这件事变成了一下 Enter


simutil 是什么

simutil 界面展示

simutil 是一个跨平台终端 UI(TUI)工具,专为 Flutter / 移动端开发者设计,用来管理和启动 iOS 模拟器、Android 模拟器,以及连接真实物理设备——全部在终端里完成,不需要打开任何 IDE。

它的定位很明确:统一管理IOS/Android模拟器


核心功能:三件事,一个工具

1. 一键启动任意设备

打开 simutil,左右两栏并排展示所有可用的 iOS 模拟器和 Android 模拟器。用方向键选中,按 Enter,设备启动。

不需要 Android Studio,不需要 Xcode,不需要鼠标。键盘全程搞定。

2. Android 启动选项

针对 Android 模拟器,simutil 提供四种启动模式:

模式
说明
Normal
正常启动,保留上次状态
Cold Boot
冷启动,完整重置系统状态
No Audio
无音频模式,安静开发
Cold Boot + No Audio
冷启动 + 无音频组合

这四种模式在 Android Studio 的 AVD Manager 里都有,但要点进去好几层才能选。simutil 直接在选设备那一步就让你选好。

3. ADB 工具内置:无线连接真机

这是 simutil 最实用的隐藏功能。对于真实 Android 物理设备,它内置了三种无线连接方式:

方式一:IP 地址直连

设备 IP + 端口 → 一键 adb connect

方式二:6 位配对码(Android 11+)

手机开启「通过配对码配对」→ 输入 6 位码 → 完成

方式三:QR 码配对(Android 11+)

终端内直接渲染 ASCII QR 码 → 手机扫一下 → 连接

最后这个细节值得单独说:simutil 依赖了 ascii_qr 这个 Dart 包,能在终端里用 ASCII 字符渲染出可以被手机扫描的二维码。整个流程不需要离开终端。


技术底座:Nocterm,Flutter 风格的 TUI 框架

simutil 的 UI 层基于 Nocterm,这是一个用于 Dart 的终端 UI 框架,语法和 Flutter Widget 高度相似。

这个选择本身就是一个有意思的技术决定:作者是 Flutter 开发者,于是用 Flutter 的思维方式在终端里构建 UI——Widget 树、声明式布局、状态管理,只是渲染目标从 GPU Canvas 变成了终端字符。

依赖清单:

dependencies:
  nocterm:
 ^0.5.1     # TUI 框架(Flutter-like 语法)
  process_run:
 ^1.3.0 # 执行 adb / xcrun 等系统命令
  ascii_qr:
 ^1.0.1    # 终端内渲染 QR 码
  mason_logger:
 ^0.3.3 # 格式化日志输出
  args:
 ^2.7.0        # 命令行参数解析
  yaml:
 ^3.1.3        # 配置文件解析
  path:
 ^1.9.0        # 路径处理

安装方式

支持平台:macOS ✅ · Linux ✅ · Windows ❌

方式一:一行脚本安装(推荐)

curl -fsSL https://raw.githubusercontent.com/dungngminh/simutil/main/install.sh | bash

方式二:Homebrew(macOS / Linux)

brew tap dungngminh/simutil
brew install simutil

方式三:pub.dev 全局安装

dart pub global activate simutil

方式四:从源码构建

git clone https://github.com/dungngminh/simutil.git
cd
 simutil
dart pub get
dart pub global activate --source path .

安装完成后,直接运行:

simutil

本地开发 / 热重载

git clone https://github.com/dungngminh/simutil.git
cd
 simutil
dart pub get

# 本地运行

dart run bin/simutil.dart

# 热重载模式(开发 simutil 本身时用)

dart --enable-vm-service bin/simutil.dart

使用前提

simutil 本身不安装 Android SDK 或 Xcode,它调用的是系统里已有的工具:

  • • iOS 模拟器:需要安装 Xcode(包含 xcrun simctl
  • • Android 模拟器:需要安装 Android SDK(包含 emulator
  • • ADB 功能:需要安装 adb(通常随 Android SDK 一起安装)

和同类工具的对比

工具
类型
启动方式
ADB 工具
无线连接
跨平台
Android Studio AVD Manager
GUI IDE
点击多步
Xcode Simulator
GUI IDE
点击多步
flutter emulators
CLI
命令行
simutil TUI 一键 Enter ✅(含 QR) macOS/Linux

flutter emulators 是 Flutter SDK 自带的命令行工具,可以列出并启动模拟器,但没有 TUI 界面,没有并排浏览,没有 ADB 管理,没有无线连接。simutil 是对这个工具的功能升级,加了交互界面和实用工具集。


总结点评

这是一个很典型的「痒点工具」——解决的不是不能用,而是每天用起来不顺手的那种摩擦。

Flutter 开发者每天打开关闭模拟器无数次,在 IDE 和终端之间反复切换。simutil 的价值主张非常简洁:你本来就在终端里,凭什么要去开 IDE 只为了启动一个模拟器?

技术上,用 Dart + Nocterm 构建 TUI 这个路径也很有意思。Dart 在服务端和命令行工具领域的生态一直比较薄,Nocterm 这个框架在试图打开这个空间——simutil 刚好是一个证明它可行的实际案例。

ADB 无线连接 + QR 码配对这个功能组合尤其实用:很多 Flutter 开发者每次接真机都要找数据线,simutil 加上手机侧的一次性设置之后,之后每次打开工具扫一下就行了。

项目刚刚发布 0.3.2 版本,Stars 还在 87,处于很早期的阶段。对于每天用 Flutter 开发的同学,值得装一个试试——几乎没有上手成本,一行命令安装,simutil 直接跑起来。


GitHub:https://github.com/dungngminh/simutil