flutter pub upgrade的坑

2022-07-06  本文已影响0人  晓函

flutter pub upgrade后,build一直失败,说有依赖包需要kotlin新版。
因为我是用的新版flutter ,项目里使用了最低支持的旧版本的kotlin,比较麻烦。

image.png

无论我怎么flutter clean,改pubspec.yaml,
删除Users/xxx/.gradle/caches/*,都没用。

对比发现pubspec.lock里面的许多间接依赖包版本变了,pub upgrade会更新项目实际使用的间接依赖包。
把老的pubspec.lock复制进来后,才又build成功。

查了很多资料,折腾了半天,搞定后,

今天分享一下经验:

pubspec.yaml

直接引入的依赖包,版本可以通过语法浮动,
如xxx:">=2.12.0 <3.0.0" 表示2.12.0-3.0.0之间版本
yyy:^1.2.3,表示1.2.0-1.2.9版本,第三位可以根据需要自动调整

pubspec.lock

实际使用的依赖包版本,并且更详细,有以下两种包
1、直接引入的包版本
2、间接依赖包版本(你直接引入的包 也还依赖的其他第三方包)

flutter pub get

修改pubspec.yaml,flutter pub get命令,会更改pubspec.lock的“直接引入依赖包版本”,但是不会改变“间接依赖包版本”

flutter pub upgrade 命令会做两件事,

1、把pubspec.yaml中直接引入的包版本在允许浮动范围内升级到最新,缓存到flutter sdk
2、把pubspec.yaml直接引入的包的所有“间接依赖包版本”在允许浮动范围内升级到最新,并且写入pubspec.lock。
大多数包都是yyy:^1.2.3形式,所以flutter pub upgrade命令会把所有把的第三位数升级到最新。

填坑

如果你flutter pub upgrade升级了所有间接依赖包,不兼容了,想恢复:
有备份的话很简单,把老的pubspec.lock复制到到项目来,但是这个文件不能删,一旦删除又会变为新包。
假如没有备份,像我这种用的新版flutter2.10(默认kotlin是5.0-6.0) ,项目里使用了最低支持的旧版本的kotlin4.13,那就很麻烦了,新版sdk里面有些间接依赖包都是用新kotlin,这样pub get会失败。
麻烦流程
1、直接删掉现在flutter sdk 2.10
2、安装以前老版本flutter sdk 2.5/2.8,把pubspec.yaml的引入包版本都调整好,pub get成功后,就有了老版本的pubspec.lock
2、删掉老版本flutter sdk2.8,重新安装现在版本flutter sdk2.10,这样间接依赖包版本就控制住了。直接pub get,build apk

上一篇下一篇

猜你喜欢

热点阅读