React Native 临时工作空间移动错误解决方案
问题描述
在使用 React Native 开发 Android 应用时,可能会遇到以下构建错误信息:
java
java.io.UncheckedIOException: Could not move temporary workspace
(C:\路径\android.gradle\8.6\dependencies-accessors\临时文件夹)
to immutable location
(C:\路径\android.gradle\8.6\dependencies-accessors\目标文件夹)
这个错误通常发生在 Gradle 构建过程中,特别是升级到 Gradle 8.6 或 8.7 版本后。主要问题表现为:
- Gradle 无法将临时工作空间文件移动到最终位置
- 文件操作被系统或进程阻止
- Android 构建过程被中断
- 用户尝试使用
./gradlew clean
或升级 Gradle 版本后问题依旧存在
关键线索
错误中的路径包含两段不同的哈希值标识:
- 临时工作区路径(含两个哈希段)
- 目标路径(仅一个哈希段) 问题根源是 Gradle 内部文件操作失败导致的构建中断
解决方案
方法一:降级 Gradle 版本(推荐)
这是最有效的解决方案,适用于大多数情况:
打开项目中的 Gradle 配置文件:
android/gradle/wrapper/gradle-wrapper.properties
修改分发 URL 将版本降至 8.5:
propertiesdistributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip
强制重新安装 Gradle:
- 删除项目中的
.gradle
缓存文件夹(位于android
目录内)
bash# Windows 命令 rmdir /s /q android\.gradle # macOS/Linux 命令 rm -rf android/.gradle
- 删除项目中的
清理和重新构建项目:
bashcd android ./gradlew clean cd .. npx react-native run-android
为什么有效
Gradle 8.6 版本中存在文件操作 Bug(BGR-28475),降级到 8.5 可规避此问题。Google 也在其官方文档中提到了此版本兼容性问题。
方法二:升级至修复版本(Gradle 8.11+)
如果您希望保留较新版本的 Gradle:
修改
gradle-wrapper.properties
:propertiesdistributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
删除
.gradle
缓存文件夹运行
./gradlew clean && ./gradlew build
兼容性说明
Android Studio Jellyfish 2023.3.1 等新版 IDE 需要配对 AGP 插件版本:
toml
agp = "8.3.0" # 确保与 Gradle 兼容
方法三:完整缓存清理流程
如果上述方法无效,执行完整清理:
bash
# 删除依赖相关文件
rm -rf node_modules
rm -rf android/.gradle
rm -f yarn.lock # 或 package-lock.json
rm -rf .idea # IntelliJ/Android Studio 配置
# 重新安装依赖
yarn install # 或 npm install
# 停止所有 Gradle 进程
cd android && ./gradlew --stop
# 清理构建缓存
./gradlew clean
# 重启 Metro 服务
cd ..
npm start --reset-cache
# 部署安卓应用
npx react-native run-android
常见问题排查
文件锁定问题(Windows 特有)
- 检查是否被其他程序锁定:
- 使用资源监视器查找被
node.exe
锁定的目录 - 关闭 Visual Studio Code、Android Studio 等占用工具
- 使用资源监视器查找被
- Windows 权限问题:ps
# 以管理员身份运行终端 Start-Process PowerShell -Verb RunAs
- 确保开启长路径支持:
多进程冲突处理
Metro 服务冲突:
- 不要并行运行多个
npm start
进程
bash# 正确启动顺序 npm start # 第一个终端窗口 npm run-android # 第二个终端窗口
- 不要并行运行多个
IDE 干扰问题:
技术原理说明
错误深层原因
Gradle 工作流程:
关键故障点:
- Gradle 8.6 的文件移动逻辑缺陷
- 系统文件锁未被正确释放
- 临时文件夹名称结构不匹配
解决方案选择依据
方法 | 成功率 | 复杂程度 | 推荐场景 |
---|---|---|---|
Gradle 降级 | ★★★★ | 简单 | 快速构建恢复 |
完整清理 | ★★★ | 中等 | 其他方法无效时 |
Gradle 升级 | ★★ | 复杂 | 追求新版本功能 |
最佳实践建议
- Gradle 版本冻结 - 在项目稳定后锁定 Gradle 版本properties
distributionSha256Sum=xxxx # 避免自动升级
- 定期清理缓存 - 每月执行一次完整清理流程
- 构建隔离 - Android 构建期间关闭无关应用 ::>
额外注意事项
- JDK 要求:Java Development Kit 17 是最稳定选择
- 防病毒软件:临时禁用 Windows Defender 测试是否干扰
- 路径长度:避免深层项目路径(尤其在 Windows 系统):
C:\short-path\project # 理想路径 vs C:\Users\...\nested\deep\project\path # 可能导致问题
如果所有方案均无效,建议参考 Gradle 官方 Issue 获取最新修复动态。