You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fastlane并发构建报错:目录冲突与文件找不到问题求助

Fastlane并发构建目录冲突与文件找不到问题解决

问题原因

Fastlane的gradle动作和android_versioning插件内部会修改当前工作目录(chdir),多线程并发时两个线程的目录切换操作互相覆盖,导致其中一个线程无法找到目标文件,同时触发conflicting chdir警告。你传递的cwd参数未被有效用于隔离线程的工作目录环境,导致相对路径解析混乱。

解决方案

通过为每个线程创建独立的目录上下文,并使用绝对路径指定项目目录,彻底隔离线程间的目录操作:

修改后的Fastfile代码

lane :builds do
    current_directory = Dir.pwd
    google_thread = Thread.new do
      # 为Google构建创建独立目录上下文
      Dir.chdir(current_directory) do
        google_staging
      end
    end
    huawei_thread = Thread.new do
      # 为Huawei构建创建独立目录上下文
      Dir.chdir(current_directory) do
        huawei_staging
      end
    end

    google_thread.join
    huawei_thread.join
end

lane :google_staging do
    # 用绝对路径指定app目录,避免相对路径解析错误
    app_dir = File.expand_path('./app', Dir.pwd)
    increment_version_code(app_project_dir: app_dir, flavor: "staging")

    gradle(
        task: "assemble",
        flavor: "staging",
        build_type: "release",
        project_dir: app_dir # 明确指定gradle构建的项目目录
    )
end

lane :huawei_staging do
    # 用绝对路径指定app-hms目录
    hms_dir = File.expand_path('./app-hms', Dir.pwd)
    increment_version_code(app_project_dir: hms_dir, flavor: "staging")

    gradle(
        task: "assemble",
        flavor: "staging",
        build_type: "release",
        project_dir: hms_dir # 明确指定gradle构建的项目目录
    )
end

关键修改说明

  • 每个线程通过Dir.chdir(current_directory) { ... }包裹子lane调用,确保线程内的目录操作被限制在独立上下文,不会干扰其他线程。
  • 用File.expand_path生成项目目录的绝对路径,替代依赖当前工作目录的相对路径,避免路径解析混乱。
  • 给gradle动作添加project_dir参数,明确指定构建的项目目录,防止Fastlane自动切换目录时出错。

额外注意事项

  • 如果./app或./app-hms不是精确路径,替换为项目中对应的实际相对路径(比如../modules/app),避免**/app这类模糊匹配导致的多路径问题。
  • 确认使用的所有Fastlane插件(比如android_versioning)支持多线程操作,若插件存在全局状态或共享文件写入逻辑,需添加线程锁或改为串行执行。

内容的提问来源于stack exchange,提问作者mohamed hamada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:50:57