Flutter 热重载到多个设备
Flutter Hot Reload to multiple devices
是否可以通过热重载连接多个设备?
具体来说,Android 和 iOS 模拟器同时运行。
这在 Android Studio 中对我有用:
启动两个模拟器/连接设备
运行 您的代码 flutter run -d all
按r
热重载
如果您尝试直接在 Visual Code 上加载它是行不通的,但是只需几个步骤,您就可以使用 VS Code 或任何其他代码进行编码 IDE 并热重载您的代码 IDE
加载iOS模拟器
在终端
open -a Simulator
加载Android模拟器
在 Android Studio 和 运行 中打开 ADV
打开一个终端来管理Android的热重载
在应用程序的文件夹中 运行
flutter run -d [ios-device-id]
打开另一个终端来管理iOS的热重载
在应用程序的文件夹中,运行
flutter run -d [android-device-id]
在两个终端中你会看到:
要在 运行 期间热重载更改,请按 "r"。要热重启(和重建状态),请按 "R"。
因此,此时只需更新您的代码,保存并在每个终端中按 "r",虽然不是同时进行,但足以让两个模拟器同时打开并查看结果
如果您将 VS Code 用作 Flutter IDE,这就是您如何使用 VSC 启动配置和任务从单次启动并发 运行 并启用热重载所有设备。
如果您在执行 flutter run -d all
时遇到问题,这是一个替代解决方案,可以让您指定应该 运行 的设备。
确保您指定的设备在 运行ning 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
和 select 您刚刚创建的 Flutter-All
配置然后 运行.
然后您将看到终端 window 出现并且能够在各个热重载会话之间切换 运行ning(作为它们自己 shell 中的任务)。
一些背景知识
我们通过任务的 dependsOn
选项使用 'Compound Tasks',而不是用于配置的 'Compounds'。
由于无法同时启动配置,只能按顺序启动,我们使用可以同时 运行 的任务。
因此,"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"]
}
]
在 Android 工作室中,如果您 运行 不止一台设备,run
菜单
下有一个选项 Flutter hot reload (All Devices)
Android Studio Flutter:热重载多个设备
如果您运行正在android构建您的 Flutter 应用程序,并且已经启动了多个设备或模拟器来预览您的 Flutter 应用程序(并且有相应的“运行”选项卡向下在下面的 IDE) 中,您可能会发现保存您的项目只是 hot-reloads 个实例之一。
热重载多个设备键盘快捷键:查看运行菜单找到热重载多个设备的键盘快捷键一次设备。
这些是 MacOS 上用于热重新加载和热重启多个设备的默认快捷方式。注意 (所有设备) 变体。
要同时调试多个设备,您应该为每个设置了 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"],
}
]
}
保存后,复合配置将显示在调试侧边栏顶部的下拉列表中。
是否可以通过热重载连接多个设备? 具体来说,Android 和 iOS 模拟器同时运行。
这在 Android Studio 中对我有用:
启动两个模拟器/连接设备
运行 您的代码
flutter run -d all
按
r
热重载
如果您尝试直接在 Visual Code 上加载它是行不通的,但是只需几个步骤,您就可以使用 VS Code 或任何其他代码进行编码 IDE 并热重载您的代码 IDE
加载iOS模拟器 在终端
open -a Simulator
加载Android模拟器 在 Android Studio 和 运行 中打开 ADV
打开一个终端来管理Android的热重载 在应用程序的文件夹中 运行
flutter run -d [ios-device-id]
打开另一个终端来管理iOS的热重载 在应用程序的文件夹中,运行
flutter run -d [android-device-id]
在两个终端中你会看到:
要在 运行 期间热重载更改,请按 "r"。要热重启(和重建状态),请按 "R"。
因此,此时只需更新您的代码,保存并在每个终端中按 "r",虽然不是同时进行,但足以让两个模拟器同时打开并查看结果
如果您将 VS Code 用作 Flutter IDE,这就是您如何使用 VSC 启动配置和任务从单次启动并发 运行 并启用热重载所有设备。
如果您在执行 flutter run -d all
时遇到问题,这是一个替代解决方案,可以让您指定应该 运行 的设备。
确保您指定的设备在 运行ning 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
和 select 您刚刚创建的 Flutter-All
配置然后 运行.
然后您将看到终端 window 出现并且能够在各个热重载会话之间切换 运行ning(作为它们自己 shell 中的任务)。
一些背景知识
我们通过任务的 dependsOn
选项使用 'Compound Tasks',而不是用于配置的 'Compounds'。
由于无法同时启动配置,只能按顺序启动,我们使用可以同时 运行 的任务。
因此,"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"]
}
]
在 Android 工作室中,如果您 运行 不止一台设备,run
菜单
Flutter hot reload (All Devices)
Android Studio Flutter:热重载多个设备
如果您运行正在android构建您的 Flutter 应用程序,并且已经启动了多个设备或模拟器来预览您的 Flutter 应用程序(并且有相应的“运行”选项卡向下在下面的 IDE) 中,您可能会发现保存您的项目只是 hot-reloads 个实例之一。
热重载多个设备键盘快捷键:查看运行菜单找到热重载多个设备的键盘快捷键一次设备。
这些是 MacOS 上用于热重新加载和热重启多个设备的默认快捷方式。注意 (所有设备) 变体。
要同时调试多个设备,您应该为每个设置了 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"],
}
]
}
保存后,复合配置将显示在调试侧边栏顶部的下拉列表中。