Flutter pubspec.lock与pubspec.yaml版本不一致,无法回退至Android 31 SDK
问题
原本基于Android 31 SDK开发Flutter项目,为测试需求安装了一个要求Android 33 SDK的pub.dev包,之后改回原版本并删除pubspec.lock执行flutter pub get,却出现「部分插件需要Android 33 SDK」的错误,项目无法运行或构建。已尝试以下操作但均无效:
- 删除
pubspec.lock后执行flutter pub get - 执行
flutter pub cache repair再运行flutter pub get - 执行
flutter pub cache clean再运行flutter pub get - 在Android Studio中执行「Invalidates Caches...」再运行
flutter pub get - 在Android Studio的SDK管理器中卸载Android API 33后运行
flutter pub get - 卸载Android Build Tool API 33后运行
flutter pub get - 删除build和
.dart_tool文件夹后运行flutter pub get - 执行
flutter clean再运行flutter pub get
目前pubspec.lock仍自动安装需要Android 33 SDK的新版本包,与pubspec.yaml中指定的旧版本不一致,需将项目恢复至Android 31 SDK环境。
Flutter Doctor检测结果
[✓] Flutter (Channel stable, 2.10.5, on macOS 12.4 21F79 darwin-arm, locale en-GB) • Flutter version 2.10.5 at /Users/novusaltairkarachi/Documents/flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 5464c5bac7 (5 months ago), 2022-04-18 09:55:37 -0700 • Engine revision 57d3bac3dd • Dart version 2.16.2 • DevTools version 2.9.2 [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2) • Android SDK at /Users/novusaltairkarachi/Library/Android/sdk • Platform android-33, build-tools 29.0.2 • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840) • All Android licenses accepted. [✓] Xcode - develop for iOS and macOS (Xcode 13.2.1) • Xcode at /Applications/Xcode.app/Contents/Developer • CocoaPods version 1.11.3 [✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [✓] Android Studio (version 2021.2) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840) [✓] Connected device (1 available) • Chrome (web) • chrome • web-javascript • Google Chrome 105.0.5195.125 [✓] HTTP Host Availability • All required HTTP hosts are available • No issues found! Process finished with exit code 0
项目配置信息
compileSdkVersion 31 minSdkVersion 21 targetSdkVersion 31
解决方案
1. 强制锁定依赖精确版本
在pubspec.yaml中,给所有依赖(尤其是之前安装过的SDK33要求包)指定无范围的精确版本号,避免使用^x.x.x这类会自动升级的写法。示例:
dependencies: flutter: sdk: flutter problematic_package: 2.0.0 # 替换为你需要的兼容SDK31的旧版本号
2. 排查并覆盖间接依赖冲突
执行flutter pub deps查看依赖树形结构,找到自动拉取SDK33版本的间接依赖,然后在pubspec.yaml中用dependency_overrides强制指定兼容版本:
dependency_overrides: conflicting_dependency: 1.5.0 # 替换为该依赖兼容SDK31的版本号
3. 彻底清理全局与项目缓存
- 删除Flutter安装目录下的
cache文件夹(你的路径为/Users/novusaltairkarachi/Documents/flutter/cache) - 删除项目根目录下的
.dart_tool隐藏文件夹 - 执行
flutter pub get重新拉取依赖
4. 统一Android项目SDK配置
- 打开
android/app/build.gradle,确认compileSdkVersion、minSdkVersion、targetSdkVersion均为31 - 打开
android/build.gradle,检查全局compileSdkVersion(若有)也设置为31,同时确保ext.kotlin_version与Flutter 2.10.5兼容(推荐1.6.10)
5. 手动修复pubspec.lock
删除pubspec.lock后,先手动编辑该文件(重新生成后),将所有关联SDK33的依赖版本替换为兼容SDK31的旧版本,再执行flutter pub get锁定版本。
6. 清理SDK残留文件
- 前往
/Users/novusaltairkarachi/Library/Android/sdk/platforms,删除android-33文件夹(若存在) - 前往
/Users/novusaltairkarachi/Library/Android/sdk/build-tools,删除33.x.x版本的工具文件夹(若存在)
内容的提问来源于stack exchange,提问作者Muhammad Hassan
相关产品推荐
相关产品推荐

