同时在多个连接的设备/仿真器上运行flutter应用

Oli*_*etz 3 flutter

如何在多个设备上同时运行我的flutter应用程序,而不必执行以下顺序过程:选择设备->运行,选择其他设备->运行等?

使用:Android Studio 3.2.1 Flutter 1.0.0 Dart 2.1.0

Dar*_*sen 7

如前所述,有很多方法可以做到这一点。如果您使用 VS Code 而不是 Android Studio 作为 Flutter IDE,这就是您可以使用 VSC 启动配置和任务从单个启动并发运行并为所有设备启用热重载的方式。

如果您在执行时遇到问题,flutter run -d all这是一个替代解决方案,可让您指定应运行的设备。确保您指定的设备在运行时可用flutter devices

您当前的launch.json文件可能如下所示:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Flutter",
            "type": "dart",
            "request": "launch",
            "flutterMode": "debug"        
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

设置

您将需要更新此launch.json文件并在应用程序根目录tasks.json中的同一.vscode文件夹中创建。

创建 VSC 配置文件后的应用程序文件夹文件结构

仅将以下代码粘贴到 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",
        }
    ],
}
Run Code Online (Sandbox Code Playgroud)

仅将以下代码粘贴到 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' "
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

相应地替换设备名称(“iPhone 11”、“IA 模拟器上的 AOSP”、“Chrome”)。

启动所有设备

按 F5 键。

你已经完成了。

如果 F5 快捷方式Start Debugging对您不起作用,请导航到Debug & Run侧面板的 并选择Flutter-All您刚刚创建的配置,然后选择运行。

调试和运行菜单 > 配置选择

然后,您将看到终端窗口出现,并且能够在运行的各个热重载会话之间切换(作为它们自己的 shell 中的任务)。

每个 Flutter 设备同时运行的单独终端会话

一些背景

我们通过任务上的dependsOn选项使用“复合任务”,而不是用于配置的“复合”。

由于不可能同时启动配置,只能按顺序启动,我们使用可以并发运行的任务。

因此,“Flutter-All”配置执行 iOS、Android 和 Web 配置的任务。

如果使用化合物,则需要在下一次运行之前完成配置,这不是我们想要的。使用任务,我们可以选择顺序执行它们,但默认情况下,使用该dependsOn选项时它们将同时执行。

//Do not use this unless you want to use Configurations only by testing them sequentially and not tasks
"compounds": [
    {
        "name": "Flutter-All",
        "configurations": ["Flutter-iOS", "Flutter-Android", "Flutter-Web"],
    }
]
Run Code Online (Sandbox Code Playgroud)


Oli*_*etz 6

在终端中运行命令:

flutter run -d all 
Run Code Online (Sandbox Code Playgroud)

创建一个脚本(例如,root中的runall.sh):

#!/usr/bin/env bash
flutter run -d all
Run Code Online (Sandbox Code Playgroud)

并转到“运行”->“编辑配置”。按左上角的“ +”->选择“重击”。然后设置:

  • 名称:runall
  • 脚本:[runall.sh脚本的路径]
  • 解释器路径:/ bin / bash

选择“ runall”而不是“ run”图标旁边的“ main.dart”。现在,执行运行(也通过快捷方式)将在所有设备上运行应用程序。

缺点: 您必须在运行终端中输入“ r”,然后输入Enter进行热重载。图标和快捷方式不起作用。但是,热重载会在所有设备上执行。

现在只是一个解决方法。我很确定flutter插件很快就会解决这个问题。


归档时间:

查看次数:

1105 次

最近记录:

6 年,3 月 前