如何在同一设备上为不同的项目使用两个版本的颤振?
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/Documents
的Documents
文件夹中安装了不同版本的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 clean
和 flutter 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 应用的两个版本