如何在同一设备上为不同的项目使用两个版本的颤振?

Posted

技术标签:

【中文标题】如何在同一设备上为不同的项目使用两个版本的颤振?【英文标题】:How to use two version of flutter on same device for different projects? 【发布时间】:2019-09-11 00:03:47 【问题描述】:

我有一个稳定的颤振通道 SDK,位于 c:\flutter。在系统环境变量中设置为 Flutter 的默认路径。

当我在 IntelliJ 中为我们的客户创建新的 Flutter 项目时,我正在使用这条路径 c:\flutter。

我还在 c:\flutter_master 下载了 Flutter 主频道,我需要将此 Flutter SDK(主)用于另一个项目。

如何在同一设备上为不同的项目正确地拥有两个可工作的 Flutter 版本,而无需每次都使用系统环境变量?

【问题讨论】:

【参考方案1】:

如果您使用 VSCode,则可以为每个工作区指定 Flutter SDK。您需要:

    将 Flutter 存储库克隆到新文件夹:
mkdir ~/flutter_dev
cd ~/flutter_dev
git clone https://github.com/flutter/flutter.git .
    使用以下内容创建.vscode/settings.json

  "dart.flutterSdkPath": "/Users/youruser/flutter_dev"

    重新启动 VSCode,一切顺利。

在Dart Code - Quickly Switching Between SDK Versions查看更多信息

【讨论】:

Dart 代码插件的链接文档非常好,尤其是文档中包含的注释,其中包括使用 git worktree 使用单个本地 Flutter SDK 安装 (git repo) 安装多个 Flutter 通道。 "settings": "dart.flutterSdkPath": "/Users/youruser/flutter_dev" 我要在哪里写这行,在哪个文件中,请多解释 @Sana'aAl-ahdal 看到这个:code.visualstudio.com/docs/getstarted/settings 感谢您的回复,我通过创建 Alias 来修复它,就像这里描述的那样 medium.com/@sarbagyastha/… 一个小提示:如果你将flutter repo克隆到一个名为'flutter_dev'的文件夹中,那么你需要引用flutter_dev文件夹中的flutter文件夹。例如。 "/Users/youruser/flutter_dev/flutter"【参考方案2】:

首先你需要下载所有你希望能够在本地切换并创建别名的flutter sdk,这允许你通过命令行或终端使用多个版本的sdk,就像你使用任何flutter命令一样, 如果您想在 IDE 中使用这些不同版本的 SDK,则需要将 SDK 路径添加到 IDE 的设置中。您可以在下面找到将路径添加到 vscode 的步骤。以下答案将帮助您设置不同版本的 SDK,无论您使用的是 Windows、Linux 还是 Mac。

在 Mac/Linux 上创建别名

这就是我在 M1 mac 上的做法,

我在位于$HOME/DocumentsDocuments 文件夹中安装了不同版本的flutter SDK

为了通过终端访问到合适版本的flutter,我们需要创建别名。将别名视为通过命令行访问 SDK 的快捷方式。

    要创建别名,您需要在 $HOME 目录中创建 .bash_aliases 文件

你可以通过终端运行

nano ~/.bash_aliases

将这些别名粘贴到文件中的适当路径。

alias flutterd='~/Documents/flutter_dev/bin/flutter'
alias flutterm='~/Documents/flutter_master/bin/flutter'
alias flutterb='~/Documents/flutter_beta/bin/flutter'

请注意,您可以随意命名别名。

我用过这个名字

flutterd 指向flutter_dev flutterm 指向flutter_master flutterb 指向flutter_beta

这意味着当您在终端中键入 flutterd 时,它将使用位于 ~/Documents/flutter_dev/bin/flutter 的 SDK 并分别用于其余别名。

(按 ctrl + x 回车保存退出)

    最后,您需要将其添加到您的 shell 文件中
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

基本上就是rc文件

$HOME/.bashrc 如果你正在使用 bash

$HOME/.zshrc 文件,如果你使用的是 zsh

如果您不确定,那么在终端中输入 echo $SHELL 会告诉您您正在使用哪个 shell。 这是您在首次安装时添加 Flutter sdk 路径的同一个文件。如果该文件不存在,您可以创建它。

    运行source $HOME/.<rc file>刷新当前终端窗口。

现在您可以通过在终端 flutterm, flutterd 等中输入您的别名来进行验证,它将从相应的 sdk 响应。

您可以通过运行 <alias name> doctor -v 来验证这一点

例如验证 Flutterd 是否指向 dev run flutterd doctor -v

这是我运行命令时的输出

在 Windows 上创建别名

在 Windows 上,我将 Flutter SDK 存储在 C:/flutter_sdk

然后创建一个Alias文件夹,并创建每个flutter SDK对应的批处理文件,其中每个批处理文件都包含flutter SDK的路径

例如flutterd.bat 包含dev sdk 的路径

@echo off
C:\flutter_sdk\dev\bin\flutter %*

明智地命名您的批处理文件,因为您将在命令行中使用它们。例如,我有一个名为 flutterb.bat 的批处理文件指向 beta 通道,因此要访问 beta SDK,我将在命令行中使用 flutterb 而不是 flutter

最后,我们需要将别名文件夹添加到环境变量中,以使其在整个窗口中都可以访问。

转到环境变量 => 用户变量 => 路径 => 编辑=> 新建

现在您可以通过打开命令提示符并输入 flutterb doctor 来验证一切是否正常,它应该会显示 SDK 指向 beta

向 VScode 添加多个 SDK 版本

现在要在 vscode 中访问相应版本的 SDK,您需要在设置中添加这些 SDK 路径。

在您的用户设置 (CMD+SHIFT+P) 中搜索 sdk path 在 Flutter SDK 路径下添加所有路径

现在,当您打开一个 Flutter 项目时,您可以通过点击底部的 Flutter 版本来选择您想要的版本

它会提示您选择要使用的 sdk

【讨论】:

它是否适用于构建 ios?我无法使用 xCode 运行不同的版本。我不确定是否有办法告诉 xCode 使用不同的 sdk? 好问题!是的,有一种方法可以在 vscode 中使用 flutter cleanflutter pub get,flutter 会将当前选择的路径设置为 ios/Flutter/generated.xcConfig,或者您可以在该文件中手动设置 SDK 路径。【参考方案3】:

根据 Flutter 的 repo iqbalmineraltown 上的this issue 有答案:

您可能希望根据需要下载多个版本,因为每个 Flutter SDK 版本都与特定的 Dart SDK 紧密耦合。

您为每个项目设置 Flutter 版本,如果您使用 VS Code,iqbalmineraltown 会突出显示一种方式:

如果您使用的是 VSCode,您可以将多个版本的 Flutter SDK 下载到不同的路径中,并使用Dart&Flutter Plugin 在它们之间快速切换 您可以通过为每个工作区提供默认 SDK 路径来为每个项目设置默认 SDK。所以当你打开一个项目时,VSCode 会使用你为那个项目指定的版本。

【讨论】:

【参考方案4】:

如果您使用的是 android Studio,您可以从菜单 File => Setting => Languages & Frameworks => Flutter 为每个项目设置不同的 Flutter 版本:

并且要从命令行运行多个flutter版本的flutter/dart,可以关注这篇文章https://medium.com/@sarbagyastha/using-two-or-more-different-versions-of-flutter-in-single-machine-484293c2a7ff

【讨论】:

【参考方案5】:

您可以简单地重命名文件夹,而无需每次都使用系统环境变量。

    假设您在flutter文件夹下下载了Flutter 2.0.5,在flutter_2.2.2文件夹下下载了2.2.2,将flutter添加到环境路径为C:\src\flutter。 当你想要 2.2.2 版本时,将 flutter_2.2.2 重命名为 flutter & flutter 到 flutter_2.0.5。

【讨论】:

【参考方案6】:

你可以使用FVM来管理flutter的版本https://fvm.app

【讨论】:

【参考方案7】:

安装多个版本的 SDK 并调整项目特定的 IDE SDK 设置似乎是合理的,但我更喜欢命令行工具,当您调用 flutter 命令时,它总是调用路径上的那个。所以我不能使用这个解决方案。

这篇文章中的别名解决方案mentioned对我来说比较好,但是在使用它时,我经常忘记使用别名(例如flutterb)调用,导致调用错误版本的flutter。在不小心这样做之后,我通常还需要做一个flutter clean

受别名解决方案的启发,我使用的是在项目的根文件夹中添加了一个flutter.bat 文件。它包含以下几行

@echo off
C:\SDK\flutter1\bin\flutter %*

正如您可能猜到的那样,这个位置属于用于该项目的特定 Flutter 安装。它不是路径上的版本,但是由于我从项目的根文件夹中调用了所有 flutter 命令,所以我的终端会话首先看到了这个颤动,它使用了这个版本,而不是路径上的全局版本。您可以第一次致电flutter doctor 确认。

- 请注意,这是为每个项目使用恒定版本,而不是在同一个项目上尝试多个版本。对于这种用例,您可以将其与别名解决方案结合使用。- 另请注意,这是一个 Windows 解决方案。

【讨论】:

【参考方案8】:

我建议在here 上使用本教程,我对Mac 做了一些更改:

适用于基于 UNIX/Mac 的操作系统用户

编辑 $HOME/.bashrc(对我来说,在 Mac 上是 $HOME/.bash_profile)文件并添加这一行(如果它不存在)。

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
    创建和编辑$HOME/.bash_aliases 并根据需要添加别名。
alias flutter2='~/development/sdks/flutter2/bin/flutter'
alias flutter='~/development/sdks/flutter/bin/flutter'

使用相同的技术,我将flutter2 设置与flutter1 分开。因为在某些项目中我需要两个,而在旧项目中需要版本 1。

现在打开VSCode 中的特定项目并打开command palette (on Mac command was Command + Shift + P) 并搜索flutter sdk

现在选择Auto-Detect,它将在您的项目.vscode/settings.json 的根目录下创建一个新文件。

打开这个文件,把你要使用的flutter版本的路径放在下面:


  "dart.flutterSdkPath": "/Users/imran/flutter2"


记得运行flutter2 --doctor,以解决任何问题

在设置 flutter2 时,我遇到了一个问题并在此处解决了问题 I am getting error "cmdline-tools component is missing" after installing Flutter and Android Studio... I added the Android SDK. How can I solve them?。

【讨论】:

以上是关于如何在同一设备上为不同的项目使用两个版本的颤振?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow:DecodeJpeg 方法在桌面和移动设备上为同一图像提供不同的像素值

如何在同一设备上使用同一个包发布和安装同一个 android 应用的两个版本

如何处理同一站点的两个版本

在同一台服务器上为多个 repos 设置 git

IOS-如何在情节提要上为通用设备的 UIscrollview 设置框架?

如何在颤振、x 轴和 y 轴上为图表添加名称?