flutter pub upgrade后,build一直失敗但荤,說有依賴包需要kotlin新版。
因為我是用的新版flutter 涧至,項目里使用了最低支持的舊版本的kotlin腹躁,比較麻煩。
無論我怎么flutter clean南蓬,改pubspec.yaml纺非,
刪除Users/xxx/.gradle/caches/*,都沒用赘方。
對比發(fā)現(xiàn)pubspec.lock里面的許多間接依賴包版本變了铐炫,pub upgrade會更新項目實際使用的間接依賴包。
把老的pubspec.lock復制進來后蒜焊,才又build成功倒信。
查了很多資料,折騰了半天泳梆,搞定后鳖悠,
今天分享一下經(jīng)驗:
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版本,第三位可以根據(jù)需要自動調(diào)整
pubspec.lock
實際使用的依賴包版本套硼,并且更詳細卡辰,有以下兩種包
1、直接引入的包版本
2邪意、間接依賴包版本(你直接引入的包 也還依賴的其他第三方包)
flutter pub get
修改pubspec.yaml九妈,flutter pub get命令,會更改pubspec.lock的“直接引入依賴包版本”雾鬼,但是不會改變“間接依賴包版本”
flutter pub upgrade 命令會做兩件事萌朱,
1、把pubspec.yaml中直接引入的包版本在允許浮動范圍內(nèi)升級到最新策菜,緩存到flutter sdk
2晶疼、把pubspec.yaml直接引入的包的所有“間接依賴包版本”在允許浮動范圍內(nèi)升級到最新酒贬,并且寫入pubspec.lock。
大多數(shù)包都是yyy:^1.2.3形式翠霍,所以flutter pub upgrade命令會把所有把的第三位數(shù)升級到最新锭吨。
填坑
如果你flutter pub upgrade升級了所有間接依賴包,不兼容了寒匙,想恢復:
有備份的話很簡單零如,把老的pubspec.lock復制到到項目來,但是這個文件不能刪蒋情,一旦刪除又會變?yōu)樾掳?br>
假如沒有備份埠况,像我這種用的新版flutter2.10(默認kotlin是5.0-6.0) 耸携,項目里使用了最低支持的舊版本的kotlin4.13棵癣,那就很麻煩了,新版sdk里面有些間接依賴包都是用新kotlin夺衍,這樣pub get會失敗狈谊。
麻煩流程
1、直接刪掉現(xiàn)在flutter sdk 2.10
2沟沙、安裝以前老版本flutter sdk 2.5/2.8河劝,把pubspec.yaml的引入包版本都調(diào)整好,pub get成功后矛紫,就有了老版本的pubspec.lock
2赎瞎、刪掉老版本flutter sdk2.8,重新安裝現(xiàn)在版本flutter sdk2.10颊咬,這樣間接依賴包版本就控制住了务甥。直接pub get,build apk