You need to enable JavaScript to run this app. Flutter基于Github Actions+Fastlane搭建CI/CD时执行lane报找不到gradlew错误
优惠活动
大模型
产品
解决方案
定价
更多

Flutter基于Github Actions+Fastlane搭建CI/CD时执行lane报找不到gradlew错误

「Couldn't find gradlew at path」报错的排查与修复

这个报错是Fastlane配合Flutter做CI/CD时的高频问题,结合你当前的项目结构、Fastlane配置和GitHub Actions工作流配置,触发原因和修复方案非常明确:

核心触发原因

  • Fastlane内置的gradle插件,默认从执行Fastlane命令的当前工作目录下查找gradlew可执行文件。你把Fastlane放在android/子目录下,配置里没有显式指定gradlew路径,会直接触发查找逻辑的路径错位
  • Linux类CI环境下,git检出代码时默认不会保留gradlew的可执行权限,Fastlane的插件在查找时会因为权限不足直接判定文件不存在
  • 工作流里存在重复的冗余配置:两次checkout代码、重复的构建逻辑,进一步放大了路径查找的偏差

逐步骤修复方案

  • 给CI环境下的gradlew补执行权限
    所有Linux CI环境默认都不会自动给gradlew加可执行位,必须在执行Fastlane之前加一行配置:
    chmod +x android/gradlew
    
    不配置这一步,不管是Fastlane还是原生Gradle命令,都会直接报文件不存在的错误。
  • 在Fastfile的gradle任务配置里显式指定gradlew路径
    因为Fastlane的执行目录是android/,直接把gradlew的相对路径写进gradle任务的参数里,就能绕开插件的默认查找逻辑:
    gradle(
      task: "clean",
      gradlew_path: "./gradlew"
    )
    gradle(
      task: "bundle",
      build_type: 'Release',
      gradlew_path: "./gradlew"
    )
    
  • 精简GitHub Actions deploy任务的冗余配置
    你当前的deploy步骤里,第二次重复的actions/checkout@v2、重复执行的flutter build appbundle都是多余的:
    • 删掉重复的checkout配置
    • 删掉Fastlane里重复的gradle clean、bundle任务——你已经在Actions层完成了aab产物构建,Fastlane只需要负责把已有的aab上传到Play Store即可,不需要二次构建。简化后的lane配置如下:
      lane :closed_beta do
        upload_to_play_store(
          track: 'Closed beta',
          aab: '../build/app/outputs/bundle/release/app-release.aab',
          skip_upload_metadata: true,
          skip_upload_images: true,
          skip_upload_screenshots: true,
          release_status: "draft",
          version_code: flutter_version()["version_code"],
        )
      end
      
  • 修正错误的文件检查命令
    你现在写的Check file existence步骤,只是把find命令当字符串打印出来,根本不会实际执行查找,改成可直接验证路径的命令:
    find . -name "gradlew" -ls
    
    执行后就能直接看到CI环境下gradlew的实际路径和权限状态,方便排查问题。

避坑提醒

  • 注意:fastlane-action的subdirectory: android参数,会把执行Fastlane的工作目录切换到项目根下的android/文件夹,Fastfile里所有的相对路径,都是基于这个目录计算的,不是基于项目根目录
  • 删掉Fastfile开头的update_fastlane配置,CI环境下每次执行都自动升级Fastlane,会因为版本迭代出现未预期的插件API变更,导致构建失败
  • 你当前配置的Java 12.x版本和Flutter 1.22.5的Android构建流程不兼容,后续如果出现Gradle版本适配报错,需要把Java版本调整为11.x
  • 尽量不要在Fastlane里重复做已经在CI层完成的构建任务,Flutter生成的aab产物路径是固定的,直接读取产物上传即可,能节省近一半的CI执行时间

内容的提问来源于stack exchange,提问作者Enzo Lizama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 11:06:03