Skip to content

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 版本后问题依旧存在

关键线索

错误中的路径包含两段不同的哈希值标识:

  1. 临时工作区路径(含两个哈希段)
  2. 目标路径(仅一个哈希段) 问题根源是 Gradle 内部文件操作失败导致的构建中断

解决方案

方法一:降级 Gradle 版本(推荐)

这是最有效的解决方案,适用于大多数情况:

  1. 打开项目中的 Gradle 配置文件:

    android/gradle/wrapper/gradle-wrapper.properties
  2. 修改分发 URL 将版本降至 8.5:

    properties
    distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip
  3. 强制重新安装 Gradle:

    • 删除项目中的 .gradle 缓存文件夹(位于 android 目录内)
    bash
    # Windows 命令
    rmdir /s /q android\.gradle
    
    # macOS/Linux 命令
    rm -rf android/.gradle
  4. 清理和重新构建项目:

    bash
    cd android
    ./gradlew clean
    cd ..
    npx react-native run-android

为什么有效

Gradle 8.6 版本中存在文件操作 Bug(BGR-28475),降级到 8.5 可规避此问题。Google 也在其官方文档中提到了此版本兼容性问题。

方法二:升级至修复版本(Gradle 8.11+)

如果您希望保留较新版本的 Gradle:

  1. 修改 gradle-wrapper.properties

    properties
    distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
  2. 删除 .gradle 缓存文件夹

  3. 运行 ./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 特有)

  1. 检查是否被其他程序锁定:
    • 使用资源监视器查找被 node.exe 锁定的目录
    • 关闭 Visual Studio Code、Android Studio 等占用工具
  2. Windows 权限问题:
    ps
    # 以管理员身份运行终端
    Start-Process PowerShell -Verb RunAs
  3. 确保开启长路径支持: Windows长路径设置

多进程冲突处理

  1. Metro 服务冲突

    • 不要并行运行多个 npm start 进程
    bash
    # 正确启动顺序
    npm start    # 第一个终端窗口
    npm run-android  # 第二个终端窗口
  2. IDE 干扰问题

技术原理说明

错误深层原因

  1. Gradle 工作流程

  2. 关键故障点

    • Gradle 8.6 的文件移动逻辑缺陷
    • 系统文件锁未被正确释放
    • 临时文件夹名称结构不匹配

解决方案选择依据

方法成功率复杂程度推荐场景
Gradle 降级★★★★简单快速构建恢复
完整清理★★★中等其他方法无效时
Gradle 升级★★复杂追求新版本功能

最佳实践建议

  1. Gradle 版本冻结 - 在项目稳定后锁定 Gradle 版本
    properties
    distributionSha256Sum=xxxx # 避免自动升级
  2. 定期清理缓存 - 每月执行一次完整清理流程
  3. 构建隔离 - Android 构建期间关闭无关应用 ::>

额外注意事项

  • JDK 要求:Java Development Kit 17 是最稳定选择
  • 防病毒软件:临时禁用 Windows Defender 测试是否干扰
  • 路径长度:避免深层项目路径(尤其在 Windows 系统):
    C:\short-path\project # 理想路径
    vs
    C:\Users\...\nested\deep\project\path # 可能导致问题

如果所有方案均无效,建议参考 Gradle 官方 Issue 获取最新修复动态。