Flutter Hot Reload 到多个设备
Posted
技术标签:
【中文标题】Flutter Hot Reload 到多个设备【英文标题】:Flutter Hot Reload to multiple devices 【发布时间】:2019-01-11 03:33:44 【问题描述】:是否可以通过热重载连接多个设备? 具体来说,同时支持 android 和 ios 模拟器。
【问题讨论】:
我认为不可能同时进行热重载。 欢迎来到 Stack Overflow。你能推测吗?这个问题没有分析,也没有讨论已经尝试过的内容。 How To Ask.但一般来说,请不要问不能表明任何努力寻找解决方案的单行问题。 @Elletlar 我一般同意。但在他的问题范围内,实际上,没有必要提供更多信息。 @farhana 我找到了它,它非常简单......只需在调试模式下运行......在所有设备上。它会在两者上重新加载 - 注意我使用 VS Code @Elletlar @Rémi Rousselet 好的,谢谢兄弟的信息 【参考方案1】:这适用于我在 Android Studio 中:
启动两个模拟器/连接设备
使用flutter run -d all
运行您的代码
按r
热加载
【讨论】:
是的,我发现在终端或 vs 代码调试模式下有两种方法....thxs bro 请注意,最近它将尝试在 MacOS 和 Web 上运行。我找不到修复的解决方案。 您可以在 Flutter 安装的配置中禁用 macOS 和 Web。这样它就不会调试它们。或者临时重命名项目根目录中的“macos”和“web”文件夹。 多iOS模拟器坏了,需要安卓。【参考方案2】:如果您使用 VS Code 作为 Flutter IDE,您可以使用 VSC 启动配置和任务从单次启动并发运行,并为所有设备启用热重载。
如果您在执行 flutter run -d all
时遇到问题,这是一种替代解决方案,可让您指定应运行的设备。
确保您指定的设备在运行flutter devices
时可用。
您当前的launch.json
文件可能如下所示:
"version": "0.2.0",
"configurations": [
"name": "Flutter",
"type": "dart",
"request": "launch",
"flutterMode": "debug"
]
设置
您需要更新此 launch.json
文件并在应用程序根目录中的同一 .vscode
文件夹中创建 tasks.json
。
仅将以下代码粘贴到launch.json
"version": "0.2.0",
"configurations": [
"name": "Flutter-All",
"preLaunchTask": "Flutter-Launch-All",
"type": "dart",
,
"name": "Flutter-iOS",
"preLaunchTask": "Flutter-Launch-iOS",
"type": "dart",
,
"name": "Flutter-Android",
"preLaunchTask": "Flutter-Launch-Android",
"type": "dart",
,
"name": "Flutter-Web",
"preLaunchTask": "Flutter-Launch-Web",
"type": "dart",
],
仅将以下代码粘贴到tasks.json
"version": "2.0.0",
"tasks": [
"label": "Flutter-Launch-All",
"dependsOn": [
"Flutter-Launch-iOS",
"Flutter-Launch-Android",
"Flutter-Launch-Web"
]
,
"label": "Flutter-Launch-iOS",
"type": "shell",
"command": "flutter run -d 'iPhone 11' "
,
"label": "Flutter-Launch-Android",
"type": "shell",
"command": "flutter run -d 'AOSP on IA Emulator' "
,
"label": "Flutter-Launch-Web",
"type": "shell",
"command": "flutter run -d 'Chrome' "
]
相应地替换设备名称('iPhone 11'、'AOSP on IA Emulator'、'Chrome')。
启动所有设备
按 F5 键。
你就完成了。
如果Start Debugging
的 F5 快捷方式对您不起作用,请导航至侧面板上的 Debug & Run
并选择您刚刚创建的 Flutter-All
配置,然后运行。
然后您将看到终端窗口出现,并且能够在运行的各个热重载会话之间切换(作为它们自己 shell 中的任务)。
一些背景
我们通过任务上的dependsOn
选项使用“复合任务”,而不是用于配置的“复合”。
由于不可能同时启动配置,只能按顺序启动,我们使用可以同时运行的任务。
因此,“Flutter-All”配置执行 iOS、Android 和 Web 配置的任务。
如果使用复合,则需要在下一次运行之前完成配置,这不是我们想要的。
对于任务,我们可以选择顺序执行它们,但默认情况下,当使用 dependsOn
选项时它们将同时执行。
//Do not use this in your launch.json file unless you want to debug one platform at a time.
"compounds": [
"name": "Flutter-All",
"configurations": ["Flutter-iOS", "Flutter-Android", "Flutter-Web"]
]
【讨论】:
我们可以用工作断点来做到这一点吗?我在顶部的 vscode 调试工具栏缺少带有 Flutter devtools 功能的“F”。 尚未对此进行测试,尽管您可以尝试将这些字段添加到配置中:__ "configurations": [ "name": "Flutter-All", "preLaunchTask": "Flutter-Launch-All ", "type": "dart", "request": "launch", "program": "lib/main.dart" ] "request": "attach" 而不是 "request": "launch"【参考方案3】:在 Android Studio 中,如果您运行多台设备,run
菜单下有一个选项 Flutter hot reload (All Devices)
【讨论】:
谢谢,这正是我想要的 如何在多台设备上附加第一次运行?当我热重载“所有设备”时,只有最后一个得到重建【参考方案4】:如果您尝试直接在 Visual Code 上加载它是行不通的,但只需几个步骤,您就可以使用 VS Code 或任何其他 IDE 进行编码,并在 IDE 之外热重新加载您的代码
加载 iOS 模拟器 在终端中
打开 -a 模拟器
加载 Android 模拟器 在 Android Studio 中打开 ADV 并运行想要的模拟器
打开一个终端来管理Android的热重载 在应用程序的文件夹中运行
flutter run -d [ios-device-id]
打开另一个终端来管理iOS的热重载 在应用程序的文件夹中,运行
flutter run -d [android-device-id]
你会在两个终端看到:
? 要在运行时热重载更改,请按“r”。要热重启(和重建状态),请按“R”。
所以,此时只需更新您的代码,保存并在每个终端中按“r”,这不是同时进行的,但足以让两个模拟器同时打开并查看结果
【讨论】:
【参考方案5】:要同时调试多个设备,您应该为设置了 deviceId 字段的每个设备设置启动配置(这与您传递给flutter run -d xxx)
的 ID 相同。通过单击 Debug -> Open Configurations
打开启动配置。添加底部的 compound
配置将同时启动两个(或更多)配置:
"version": "0.2.0",
"configurations": [
"name": "Current Device",
"request": "launch",
"type": "dart"
,
"name": "Android",
"request": "launch",
"type": "dart",
"deviceId": "android"
,
"name": "iPhone",
"request": "launch",
"type": "dart",
"deviceId": "iphone"
,
],
"compounds": [
"name": "All Devices",
"configurations": ["Android", "iPhone"],
]
保存后,复合配置将显示在调试侧栏顶部的下拉列表中。
Source
【讨论】:
【参考方案6】:Android Studio Flutter:热重载多个设备
如果您正在运行 android 来构建您的 Flutter 应用程序,并且已经启动了多个设备或模拟器来预览您的 Flutter 应用程序(并且在 IDE 下方有相应的“运行”选项卡),您可能会发现保存项目只是热的- 重新加载其中一个实例。
热重载多台设备键盘快捷键:查看运行菜单,查找一次热重载多台设备的键盘快捷键。
这些是 MacOS 上用于热重载和热重启多个设备的默认快捷方式。请注意 (所有设备) 变体。
【讨论】:
以上是关于Flutter Hot Reload 到多个设备的主要内容,如果未能解决你的问题,请参考以下文章
Android 的 Instant Run vs Flutter Hot Reload 和 React Native Hot Reload 的区别?
Flutter“不能热加载(hot reload),热重载按钮灰色且无法点击”的解决方案
如何在 Hot Reload 上使用 Provider 维护 Flutter Global BloC 状态?