调试你的 Add-to-App Flutter 模块
当你已经将 Flutter 模块集成到你的项目中,并使用 Flutter 的平台 API(如 FlutterActivity 或 FlutterViewController)来运行 Flutter 引擎和/或 UI 后,你就可以像运行普通 Android 或 iOS 应用一样构建和运行你的应用。
在你的代码包含 FlutterActivity(Android)或 FlutterViewController(iOS)的地方,Flutter 就会驱动 UI。
概述
你可能已经习惯了在运行 flutter run 或从 IDE 中启动应用时,能使用一整套熟悉的 Flutter 调试工具。
好消息是,在 add-to-app 场景下,你同样可以使用所有 Flutter 调试功能,例如:
- 热重载(Hot Reload)
- 性能叠加层(Performance Overlays)
- DevTools
- 在 Dart 代码中设置断点
实现这一切的关键命令是 flutter attach。你可以通过 Flutter SDK 的命令行工具、VS Code、IntelliJ IDEA 或 Android Studio 来运行此命令。
工作原理:
flutter attach命令会在你运行FlutterEngine后进行连接,并一直保持连接状态,直到你释放(dispose)该引擎。你甚至可以在启动引擎之前就先执行flutter attach命令,它会等待下一个可用的由你的引擎托管的 Dart VM。
从终端进行调试
- 在你的 Flutter 模块目录下,运行以下命令:
$ flutter attach - 如果你想指定特定的目标设备,可以加上
-d <设备ID>参数:$ flutter attach -d <deviceId>
成功连接后,命令行会输出类似以下的信息:
Syncing files to device iPhone 15 Pro... 7,738ms (!)
To hot reload the changes while running, press "r".
To hot restart (and rebuild state), press "R".
在 Xcode 和 VS Code 中调试 iOS 扩展
第一步:使用 Xcode 启动调试器
如果你主要使用 Xcode 进行开发,请按以下步骤操作:
- 从你的 Flutter 应用目录中打开
ios/Runner.xcworkspace。 - 使用工具栏中的 Scheme 菜单选择正确的设备(例如 iPhone 15 Pro)。
- 像运行普通 App 一样在 Xcode 中运行 Runner 目标。
- 运行完成后,Xcode 底部的 Debug Area 会显示一条包含 Dart VM 服务 URI 的消息,格式如下:
flutter: The Dart VM service is listening on http://127.0.0.1:50642/00wEOvfyff8=/ - 复制这个 URI。
第二步:在 VS Code 中连接到 Dart VM
- 打开 VS Code 的命令面板(
View > Command Palette或快捷键Cmd+Shift+P)。 - 输入
debug并选择 Debug: Attach to Flutter on Device 命令。 - 在弹出的输入框中,粘贴你从 Xcode 复制的 Dart VM 服务 URI,然后按回车。
现在,你就可以在 VS Code 中享受完整的调试体验了,包括热重载、断点和变量检查。
在 Android Studio 中调试 Android 扩展
- 在 Android Studio 中,通过 File > Open... 打开你的 Flutter 应用目录(例如
my_app)。 - 打开
lib/main.dart文件。 - 选择一个虚拟 Android 设备:
- 在工具栏最左侧的下拉菜单中,点击 Open Android Emulator: <device>。
- 请选择一个已安装的、不包含 arm64 的模拟器(推荐使用 x86_64 架构)。
- 从同一个菜单中,选择你刚刚打开的虚拟设备。
- 从工具栏点击Run
main.dart。
此时,你已经可以在 Android Studio 中直接使用
flutter attach功能,或者通过 IDE 的调试按钮进行附加调试。
无 USB 连接的调试(通过 Wi-Fi)
你也可以通过 Wi-Fi 调试你的 iOS 或 Android 设备上的应用,只需使用 flutter attach 即可。
在 iOS 设备上通过 Wi-Fi 调试
- 首先,确保你的 iOS 设备已按照 iOS 设置指南 的说明,配置为可通过 Wi-Fi 连接到 Xcode。
- 在 macOS 开发机上,打开 Xcode,进入 Product > Scheme > Edit Scheme(或使用快捷键
Cmd+<)。 - 点击 Run,然后选择 Arguments 标签页。
- 在 Arguments Passed On Launch 部分,点击
+号添加一个新参数:- 如果你的开发机使用 IPv4 网络,添加:
--vm-service-host=0.0.0.0 - 如果你的开发机使用 IPv6 网络,添加:
--vm-service-host=::0
- 如果你的开发机使用 IPv4 网络,添加:
如何判断你的网络是 IPv6?
- 打开 系统设置 > 网络。
- 点击你当前连接的网络。
- 点击 详细信息...。
- 在 TCP/IP 部分,查看是否有 IPv6 地址。
image.png
在 Android 设备上通过 Wi-Fi 调试
请确保你的 Android 设备已按照 Android 设置指南 的说明,配置为可通过 Wi-Fi 连接到 Android Studio。
完成以上任一设置后,你就可以在没有 USB 线缆的情况下,通过 flutter attach 命令连接到设备并进行调试了。
