使用FVM对Flutter SDK多版本进行管理

  • 前言

项目做的多了,必然会遇到这样一个问题:每个项目使用着不同版本的Flutter SDK
以Flutter 2.0空安全为分水岭的话,1.xx.x是之前,2.xx.x是之后,可能还有些项目使用的是beta版。

或许有人跟我一样,每使用一种SDK,就要去官网下载下来,放到本地。然而根据官网文档配置的环境。最开始状态是这样的:


flutter最初状态.png

最初环境配置.png

随着项目的增多,比如,空安全前的、空安全后的、自己想试验最新sdk的,于是使用的sdk版本也越来越来。时间久了,大致成了下面这个样子:


image.png

每个项目选用着适合它的sdk:

比如project_1使用1.22.2(空安全前):

flutter1.22.2.png

project_2使用2.8.1(空安全后):
flutter2.8.1.png

project_3使用2.10.3(当前最新版):
flutter2.10.3.png

:除了project_1能正常打包,其它项目都会报错。原因是配置的环境变量里flutter的路径是:,其它项目因为路径不符导致flutter一些功能受限。

那么,需要手动把需要打包的项目,比如project_2 所需的 flutter2.8.1 改成 flutter,将原本的flutter改成 flutter1.22.2,再执行source ~/.bash_profile和source ~/.zshrc使其生效。

如果project_3需要打包,那又要重复上面的步骤。

这样虽然能达到效果,但过于繁琐,浪费了时间。。

  • fvm

flutter version manager的缩写。此工具可让我们

  1. 在本地下载安装多个版本flutter sdk。
  2. 为项目指定flutter版本。
  3. 切换全局环境的 Flutter 软链接。

fvm地址:pub.flutter-io.cn/packages/fv…
安装步骤:fvm.app/docs/gettin…

1、安装 fvm

brew tap leoafarias/fvm
brew install fvm

如果遇到下面的错误:

971628B3791490315EDCF2D97330818C.jpg

大致意思就是,你的Command Line Tools版本要与你的Xcode版本对应。在https://developer.apple.com/download/more/下载**Command Line Tools (自己的xcode版本) **,下载后运行软件。

然后再次运行以上命令,成功后如下图所示:
安装成功.jpg

安装好fvm,输入fvm查看是否成功,如果有fvm使用引导提示,那就成功了

apple@dududeMBP fvmdemo % fvm
Flutter Version Management: A cli to manage Flutter SDK versions.

Usage: fvm  [arguments]

Global options:
-h, --help       Print this usage information.
   --verbose    Print verbose output.
   --version    current version

Available commands:
 config     Set configuration for FVM
 dart       Proxies Dart Commands
 doctor     Shows information about environment, and project configuration.
 flavor     Switches between different project flavors
 flutter    Proxies Flutter Commands
 global     Sets Flutter SDK Version as a global
 install    Installs Flutter SDK Version
 list       Lists installed Flutter SDK Versions
 releases   View all Flutter SDK releases available for install.
 remove     Removes Flutter SDK Version
 spawn      Spawns a command on a Flutter version
 use        Sets Flutter SDK Version you would like to use in a project

Run "fvm help " for more information about a command.
apple@dududeMBP fvmdemo % 

提取以上关键指令
install: 安装 Flutter 版本
use: 选择你要使用的版本
list: 查看已安装的 Flutter 版本
remove:删除已安装的某个 Flutter 的版本
config: 对 fvm 进行配置
flutter: 对 Flutter 的命令进行代理
releases: 查看 Flutter sdk 都有哪些发布的版本
version: 查看安装 fvm 的版本
global :设置Flutter SDK版本为全局

2、安装指定版本sdk

fvm install 版本号
image.png

依次安装了1.22.2、 2.8.1、2.10.3后,目录变成了如下所示:


E19BFCD7-E588-4E37-8D53-A26808AAF403.png

查看已安装的版本:

apple@dududeMBP fvmdemo % fvm list
Cache Directory:  /Users/dushiling/fvm/versions

2.10.3 
2.8.1
1.22.2
apple@dududeMBP fvmdemo % 

3、为各个项目指定sdk版本

fvm use 版本号

cd 到项目根目录,执行fvm use xxx, 便给它配置了软连接。
每一个执行过后的项目,里面多出一个.fvm文件夹,

软连接.png

点击flutter_sdk会跳转到指定目录下的对应版本:

1.png
2.png

4、项目打包(多个版本切换)

最初的目的,是为了解决不同项目打包时要来回切换要使用的版本的问题,那么,在操作完以上步骤后,给各个项目指定了软连接后,打包又如何呢?

很不幸,又报错了,这是为什么呢?
虽然给项目指定了软连接,但在环境变量中flutter sdk的配置依然没有变。而这个配置是全局性的,所以要把准备打包的项目指定的sdk版本设为全局的。

fvm global xxx 

项目根目录下执行fvm global xxx(它需要的版本),如果使用的是Android
studio,那直接在Terminal中执行就好。这样该版本就暂时成为了配置的全局环境变量。执行成功后,在fvm目录下

image.png


fvm全局路径.png

打包apk,效果如下:


image.png
image.png

依此总结:
project_1打包前执行 fvm global 1.22.2,
project_2打包前执行 fvm global 2.8.1
project_3打包前执行 fvm global 2.10.3

而之前所下载到本地的多个flutter sdk可以用 fvm install 版本号 自动安装到 fvm->versions下,然后可将它们删除。

F11D6D87-252E-4DD7-ADC5-A85916DBE0F5.png

本地sdk被删除后,项目中path路径为空,可选为fvm目录下的该版本。
修改路径.png

至此,打包切换版本问题解决,sdk版本管理也因为fvm明朗起来。

  • 其它

flavor

为每个项目环境或发布类型配置多个 Flutter SDK 版本

// ~/your_flutter_project.fvm/fvm_config.json
{
 "flutterSdkVersion": "1.22.6",
 "flavors": {
   "stable": "stable",
   "dev": "dev"
   "production": "1.22.6",
   "beta": "beta",
 }
}

// 它有以下几种配置:

/* 给 version 起个名,会被记录到 ~/your_flutter_project.fvm/fvm_config.json */
fvm use {version} --flavor {flavor_name} 

//list 出当前项目配置的 flavors
fvm flavor {flavor_name}

fvm flavor

你可能感兴趣的:(使用FVM对Flutter SDK多版本进行管理)