前言
在进行 Flutter 鸿蒙开发时,由于很多插件(如 image_picker, file_selector)需要引用华为或 SIG 维护的特定分支。你可能会遇到一个极其离谱的现象:同一个项目代码,之前在 Mac 上 flutter pub get 秒过,在 Windows 上却死活报错:
ERR: Package not available (the pubspec for image_picker 1.1.2 from git has version 1.0.2).
明明 Git 仓库里版本是对的,为什么 Windows 固执地认为它是旧版本?本文带你一分钟跳坑。
一、 现象描述
在 pubspec.yaml 中配置了如下依赖:
YAML
image_picker:
git:
url: https://gitcode.com/openharmony-sig/flutter_packages.git
path: packages/image_picker/image_picker
ref: br_image_picker-v1.1.2_ohos # 明确指向 1.1.2 版本
报错信息:
Package not available (the pubspec for image_picker 1.1.2 from git has version 1.0.2).
你去浏览器里翻openharmony-sig的源码,明明br_image_picker-v1.1.2_ohos的版本号就是 1.1.2。你甚至怀疑是不是 GitCode 挂了,或者是自己眼睛花了。
二、 幕后真凶:Windows 的“长路径限制”
这其实不是 Flutter 的 Bug,也不是 Git 的 Bug,而是 Windows 文件系统默认限制(MAX_PATH: 260字符) 与 Git 静默失败 共同酿成的惨剧。
1. 路径太深了
Flutter 在缓存 Git 依赖时,路径极深:
C:\Users\你的用户名\AppData\Local\Pub\Cache\git\flutter_packages-xxxx\packages\image_picker\image_picker\pubspec.yaml
这个路径轻轻松松就会突破 260 个字符。
2. Git 的“摆烂”行为
当路径超过限制时,Windows 版 Git 在执行 checkout(切换分支)时会静默失败。
- 结果: Git 以为自己切到了新分支,但磁盘上的文件实际上还是默认分支(可能是 master 或旧版)的内容。
- Pub 的反应: Pub 工具去读磁盘上的
pubspec.yaml,发现版本号跟预期不符,直接报错退出。
三、 终极解决方案(三步走)
如果你在 Windows 上遇到这个“版本对不上”的逆天报错,请按以下步骤操作:
1. 开启 Windows 系统长路径支持
以管理员身份打开 PowerShell,运行以下命令:
PowerShell
New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\FileSystem" `
-Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
2. 开启 Git 的长路径支持
在终端运行:
Bash
git config --global core.longpaths true
3. 强力清除“有毒”缓存
这是最关键的一步,必须手动清理已经出错的本地缓存:
-
删除 Pub 缓存中的 Git 目录:
直接删除
C:\Users\你的用户名\AppData\Local\Pub\Cache\git下的所有内容。 -
删除项目锁文件:
删除项目根目录下的
pubspec.lock。 -
重新获取:
运行
flutter pub get。
四、 总结
鸿蒙适配之路本就坎坷,Windows 的这个环境坑更是杀人于无形。
- Mac 没事: 因为 Unix 系系统没有这种古老的路径长度限制。
- Windows 报错: 往往是因为路径过深导致 Git 切换分支失败。
一句话经验:在 Windows 上搞 Flutter 开发,第一件事就是把系统的 LongPathsEnabled 给开了!
希望这篇文档能帮到正在绝望中的你。如果解决了你的问题,记得点个赞!
互动环节
你在鸿蒙适配过程中还遇到了哪些“离谱”的报错?欢迎在评论区交流,我们一起排坑!