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
相关产品推荐
相关产品推荐

