这个开源工具,把 iOS 模拟器和 Android 模拟器都塞进了终端里
这个开源工具,把 iOS 模拟器和 Android 模拟器都塞进了终端里
相信大家一定遇到过这个问题,你在终端里写代码,突然需要切换到另一个模拟器——比如从 Pixel 7 切到 iPhone 15。
你要做什么?
打开 Android Studio,等它加载,找到 AVD Manager,点击启动。或者打开 Xcode,找到 Simulator,选设备,等它启动。全程鼠标操作,最少要点六下,等候时间不计。
开发者每天要做这件事几十次。没有人觉得这是问题,因为一直都是这样的。
simutil 的作者 Dzung Nguyen Minh 觉得这是问题,然后用 Dart 写了一个 TUI 工具,把这件事变成了一下 Enter。
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 一起安装)
和同类工具的对比
|
|
|
|
|
|
|
|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
flutter emulators |
|
|
|
|
|
| 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
夜雨聆风