Flutter构建报错Could not create task不同根目录问题如何解决
问题原因确认
你遇到的报错确实是由项目、Flutter SDK、依赖缓存分属不同磁盘分区导致的。
「Could not create task ... this and base files have different roots」是Gradle构建的典型跨分区错误:安卓构建要求所有参与编译的模块文件必须归属同一个磁盘根目录,你存放在F盘的项目引入的url_launcher、shared_preferences等插件的安卓原生代码,默认会缓存到C盘的Flutter SDK目录下,跨盘加载就会触发任务创建失败。
Flutter SDK迁移到F盘操作步骤
- 关闭所有正在运行的Android Studio、Flutter项目进程,以及终端中运行的Flutter相关命令
- 将C盘存放的Flutter SDK整个文件夹,剪切粘贴到F盘你指定的存放目录,例如
F:\development\flutter - 更新系统环境变量配置:
- 找到系统变量中的Path项,删除原来指向C盘Flutter SDK的bin目录路径,新增F盘下新的bin目录路径,例如
F:\development\flutter\bin - 若之前配置过
PUB_CACHE、FLUTTER_STORAGE_BASE_URL等Flutter相关环境变量,同步更新对应路径
- 找到系统变量中的Path项,删除原来指向C盘Flutter SDK的bin目录路径,新增F盘下新的bin目录路径,例如
- 重启电脑让环境变量生效,打开终端执行
flutter doctor,确认SDK正常识别、所有依赖项状态正常 - 进入你的Flutter项目根目录,依次执行以下命令清理旧缓存、重新拉取依赖:
flutter clean flutter pub get - 重新打开安卓模块,等待Gradle同步完成即可正常构建
可选临时解决方案(无需迁移SDK)
如果暂时不需要迁移SDK,可通过修改依赖缓存路径解决问题:
- 在系统环境变量中新增
PUB_CACHE变量,值设置为F盘下的任意目录,例如F:\development\pub_cache - 重启终端后执行
flutter pub cache repair,将所有已下载的依赖重新缓存到F盘指定目录 - 回到项目根目录执行
flutter clean、flutter pub get,重新同步安卓模块即可
内容的提问来源于stack exchange,提问作者knobi
相关产品推荐
相关产品推荐

