美文网首页
flutter pub upgrade的坑

flutter pub upgrade的坑

作者: 晓函 | 来源:发表于2022-07-06 21:14 被阅读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

    相关文章

      网友评论

          本文标题:flutter pub upgrade的坑

          本文链接:https://www.haomeiwen.com/subject/anmybrtx.html