使用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

\color{brown}{这个时候,问题来了}:除了project_1能正常打包,其它项目都会报错。原因是配置的环境变量里flutter的路径是:\color{blue}{/Users/dushiling/flutter},其它项目因为路径不符导致flutter一些功能受限。

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

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

这样虽然能达到效果,但过于繁琐,浪费了时间。\color{brown}{所以就要寻求一个能够管理flutter sdk 版本的工具,使之能够灵活切换}

  • 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 <command> [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 <command>" 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目录下\color{green}{自动生成了一个default文件夹,点击,指向所指定的版本。}

image.png

\color{brown}{修改flutter sdk固定路径为fvm全局路径:}

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容