Flutter使用FVM实现多个版本并存,多环境配置

11,756 阅读5分钟

因为最近编写和录制Flutter的分享内容,使用的都是Flutter3.0.1的版本,和我生产开发使用的版本不一致,总是修改环境很麻烦,于是找来了FVM帮助我管理一下Flutter的版本。

FVM的全称是Flutter Version Management,一个CLI管理器,用于Flutter多版本的管理。官方网站:fvm.app

FVM通过参考每个项目使用的Flutter SDK版本来帮助满足一致的应用程序构建的需求。它还允许您安装多个Flutter版本,以快速验证和测试即将发布的Flutter版本与您的应用程序,而无需每次等待Flutter安装。

安装

Mac使用brew进行安装

brew tap leoafarias/fvm
brew install fvm

Windows安装

choco install fvm

Linux安装

brew tap leoafarias/fvm
brew install fvm

因为我用的的mac,所以这里就只提供mac的安装截图了。

设置

设置国内加速器

还需要在环境变量中增加Flutter国内的加速器,这里使用的Flutter社区的镜像站。

export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

如果之前你安装过Flutter,那么还需要在环境变量中注释掉之前的FLUTTER_HOME和PATH的配置。 还有一些其他的国内镜像

上海交通大学 Linux 用户组的镜像站(与原站实时更新)

PUB_HOSTED_URL=https://dart-pub.mirrors.sjtug.sjtu.edu.cn
FLUTTER_STORAGE_BASE_URL=https://mirrors.sjtug.sjtu.edu.cn

清华大学 TUNA 协会的镜像站(与Flutter社区同步,推荐)

PUB_HOSTED_URL=https://mirrors.tuna.tsinghua.edu.cn/dart-pub
FLUTTER_STORAGE_BASE_URL=https://mirrors.tuna.tsinghua.edu.cn/flutter

CNNIC的镜像站 (与TUNA同步)

PUB_HOSTED_URL=http://mirrors.cnnic.cn/dart-pub
FLUTTER_STORAGE_BASE_URL=http://mirrors.cnnic.cn/flutter

腾讯开源的镜像站(与TUNA同步,定时更新)

PUB_HOSTED_URL=https://mirrors.cloud.tencent.com/dart-pub
FLUTTER_STORAGE_BASE_URL=https://mirrors.cloud.tencent.com/flutter

设置sdk安装目录

安装后我们来设置一下flutter sdk保存的位置,如果不配置,在mac下的默认目录是在~/fvm

fvm config --cache-path <flutter sdk path>

修改后可以使用fvm config查看一下是否设置成功了。

设置fvm的环境变量

fvm会将我们设置的环境连接到~/fvm/default/bin这个目录,所以我们只需要在环境变量中配置~/fvm/default/bin,就可以使用fvm切换版本了。

export PATH=$PATH:~/fvm/default/bin

如果你和我一样,通过config设置了sdk的安装目录,那这里就应该根据你设置的安装目录进行设置。比如我这里是这样写的

export PATH=$PATH:/Volumes/data/DevelopmentTool/flutter/default/bin

常用的命令说明

fvm releases 查看可使用的版本

直接执行fvm releases显示的内容太多了,我们也不会需要那么早的版本,所以建议使用fvm releases | tail -{line},将line替换成你要展示的行数,比如fvm releases | tail -10只列出最近的版本基本就够用了。

fvm install 安装sdk

支持安装特定channel的版本,或者安装指定版本号的版本。

fvm install beta/stable/dev ---- 安装特定channel版本

fvm install 2.10.5 ------安装指定版本号

安装到这里的时候有个错误,说不支持link命令,这是因为我将flutter sdk的位置放到了一块ExFAT格式的硬盘上,他是我为了和windows共同写数据用的,但是这个格式的分区不支持link链接的文件,所以失败了,我修改到mac的APFS格式的硬盘就没有这个问题了。

接着我又看到这个错误

Pub failed to run subprocess `chmod`: ProcessException: Too many open files
  Command: chmod 754 /Users/radium/.pub-cache/_temp/dirpfKVWI/tool/travis.sh

打开的文件太多了,我们增加以下允许打开的文件句柄,再次允许instal命令问题解决。

ulimit -S -n 2048

当你看到这样的提示就是安装成功了。

\

如果你电脑里已经安装过一些Flutter版本的话,也可以把下载好的版本复制到你配置的sdk文件夹里,要复制最外层的文件夹,复制里边的文件是不行的,因为有一些使用“."开头的设置文件没有复制过去,fvm认为没有安装,会给你删掉重新下载。

知道了上边的道理也就可以通过下载工具将sdk下载过来,解压缩到sdk文件夹里也是可以了。

fvm remove 移除版本

fvm remove 删除某个的版本

fvm list查看已安装列表

版本都安装好以后可以使用fvm list来查看都安装了哪些版本。

fvm global 设置全局版本

fvm global 进行全局的版本切换。

fvm use 单独设置某个项目运行的版本

要设置单独项目使用某一个版本运行,首先进入到项目的目录下,使用一下命令,设置使用的版本。

fvm use 3.0.1    

VS调整:

然后在vscode的配置文件中增加这些内容,具体的文件地址是“项目根目录/.vscode/settings.json”,如果你没有这么目录,可以直接新建一个。

{
  "dart.flutterSdkPath": ".fvm/flutter_sdk",
  // or "dart.flutterSdkPaths": [".fvm/flutter_sdk"]
  // Remove .fvm files from search
  "search.exclude": {
    "**/.fvm": true
  },
  // Remove from file watching
  "files.watcherExclude": {
    "**/.fvm": true
  }
}

设置好以后重启一下vscode,就可以生效了。

AS调整

我没有在AS开发,这里的内容摘录自官方文档,本人没有测试,需要的自行。

  1. Go to Languages & Frameworks > Flutter or search for Flutter and change Flutter SDK path.
  2. Copy the absolute path of fvm symbolic link in your root project directory. Example: /absolute-project-path/.fvm/flutter_sdk
  3. Apply the changes.
  4. Restart Android Studio to see the new settings applied.
IMPORTANT

For Android Studio to detect the dynamic change of SDKs, the installed SDK must have finished setup.

Using fvm install  will ensure that setup during install.

If you have installed through another command and setup was not completed. You can finish by just running fvm flutter --version

Android Studio might take a few seconds to detect the dynamic SDK change.

If you want to ignore the Flutter SDK root directory within Android Studio you can add the following to .idea/workspace.xml.

<component name="VcsManagerConfiguration">
  <ignored-roots>
    <path value="$PROJECT_DIR$/.fvm/flutter_sdk" />
  </ignored-roots>
</component>

配置git忽略文件

在配置了fvm以后,在.fvm目录下会有一个flutter_sdk的链接文件,这个文件是不需要上传git的,否则会有冲突,在.gitignore文件中过滤一下。

/.fvm/flutter_sdk