是否可以通过热重载连接多个设备?具体来说,同时使用 Android 和 iOS 模拟器。
6 回答
这在 Android Studio 中对我有用:
启动两个模拟器/连接设备
运行你的代码
flutter run -d all
按下
r
以热重载
如果您使用 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
文件并在应用程序根目录tasks.json
中的同一文件夹中创建。.vscode
仅将以下代码粘贴到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”、“IA 模拟器上的 AOSP”、“Chrome”)。
启动所有设备
按 F5 键。
你完成了。
如果 F5 快捷方式Start Debugging
对您不起作用,请导航到Debug & Run
侧面板并选择Flutter-All
您刚刚创建的配置,然后选择运行。
然后,您将看到终端窗口出现,并且能够在运行的各个热重载会话之间切换(作为它们自己的 shell 中的任务)。
一些背景
我们通过任务上的dependsOn
选项使用“复合任务”,而不是用于配置的“复合”。
由于不可能同时启动配置,只能按顺序启动,我们使用可以同时运行的任务。
因此,“Flutter-All”配置执行 iOS、Android 和 Web 配置的任务。
如果使用 Compounds,则需要在下一次运行之前完成配置,这不是我们想要的。使用任务,我们可以选择按顺序执行它们,但是默认情况下,使用该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"]
}
]
如果您尝试直接在 Visual Code 上加载它不起作用,但只需几个步骤,您就可以使用 VS Code 或任何其他 IDE 进行编码,并在 IDE 之外热重载您的代码
在终端中加载 iOS 模拟器
打开 -a 模拟器
加载 Android 模拟器 在 Android Studio 中打开 ADV 并运行所需的模拟器
在应用程序的文件夹运行中打开终端以管理 Android 的热重载
颤振运行 -d [ios-device-id]
打开另一个终端来管理应用程序文件夹中iOS的热重载,运行
颤振运行 -d [android-device-id]
在两个终端中,您将看到:
要在运行时进行热重载更改,请按“r”。要热重启(和重建状态),请按“R”。
因此,此时只需更新您的代码,保存并在每个终端中按“r”,这不是同时进行的,但足以让两个模拟器同时打开并查看结果
要同时调试多个设备,您应该为设置了 deviceId 字段的每个设备设置一个启动配置(这是您传递给的相同 ID flutter run -d xxx)
。通过单击打开启动配置。在底部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"],
}
]
}
保存后,复合配置将显示在调试侧栏顶部的下拉列表中。