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

如何为多Flavor的Flutter应用初始化Fastlane并处理多包名?

多Flavor Flutter应用的Fastlane配置指南(适配Android+iOS)

初始化Fastlane不用纠结单一包名

不管是在android还是ios目录下执行fastlane init,遇到要求输入包名时随便填个占位值就行,后续我们会在配置文件里动态指定不同Flavor的包名,Fastlane完全支持多环境配置,不用在初始化阶段绑定死。

Android端多Flavor配置步骤

  1. 编写Fastfile的lane
    打开android/fastlane/Fastfile,给每个Flavor单独写一个lane,假设你的两个Flavor是dev和prod,对应包名com.your.app.dev和com.your.app.prod,示例代码如下:
# 上传Dev环境截图的lane
lane :upload_dev_screenshots do
  # 先编译对应Flavor的Release包(可选,若只传截图可跳过,但确保包已在商店存在)
  gradle(task: "assembleDevRelease")
  # 用supply上传截图到Google Play
  supply(
    package_name: "com.your.app.dev",
    screenshots_path: "../fastlane/screenshots/android/dev", # 截图存放路径,自行规划即可
    track: "internal" # 上传到测试渠道,按需改成beta或production
  )
end

# 上传Prod环境截图的lane
lane :upload_prod_screenshots do
  gradle(task: "assembleProdRelease")
  supply(
    package_name: "com.your.app.prod",
    screenshots_path: "../fastlane/screenshots/android/prod",
    track: "production"
  )
end
  • 提前把Google Play的服务账号密钥放在android/fastlane/google-play-credentials.json,并在Codemagic的环境变量里配置好相关凭据,否则supply无法完成授权。
  • 截图可以统一存在项目根目录的fastlane/screenshots下,分平台和Flavor建子文件夹管理,便于维护。
  1. 确认Android项目的Flavor配置
    确保android/app/build.gradle里已经正确定义了Flavor的包名:
android {
    flavorDimensions "environment"
    productFlavors {
        dev {
            dimension "environment"
            applicationId "com.your.app.dev"
            // 其他Flavor相关配置
        }
        prod {
            dimension "environment"
            applicationId "com.your.app.prod"
            // 其他Flavor相关配置
        }
    }
}

iOS端多Flavor配置步骤

  1. 编写Fastfile的lane
    打开ios/fastlane/Fastfile,同样给每个Flavor写独立lane,假设Flavor对应的Scheme是YourApp-Dev和YourApp-Prod,Bundle ID分别是com.your.app.dev和com.your.app.prod:
# 上传Dev环境截图的lane
lane :upload_dev_screenshots do
  # 编译对应Flavor的Scheme(可选,仅传截图可跳过)
  gym(
    scheme: "YourApp-Dev",
    export_method: "app-store" # 根据上传渠道调整,比如ad-hoc
  )
  # 用deliver上传截图到App Store
  deliver(
    app_identifier: "com.your.app.dev",
    screenshots_path: "../fastlane/screenshots/ios/dev",
    submit_for_review: false # 只传截图的话,不要开启这个选项
  )
end

# 上传Prod环境截图的lane
lane :upload_prod_screenshots do
  gym(
    scheme: "YourApp-Prod",
    export_method: "app-store"
  )
  deliver(
    app_identifier: "com.your.app.prod",
    screenshots_path: "../fastlane/screenshots/ios/prod",
    submit_for_review: false
  )
end
  • 要在Codemagic里配置好Apple开发者账号的凭据,比如API密钥或者应用专用密码,否则deliver无法访问App Store Connect。
  • 确认Xcode里已经为每个Flavor创建了对应的Scheme,且Bundle ID配置正确。

Codemagic里调用Fastlane

在Codemagic的构建流程中,添加Post-build script,根据需要执行对应的lane即可:
比如要上传Dev环境的截图,脚本如下:

# 处理Android Dev截图
cd android
fastlane upload_dev_screenshots

# 处理iOS Dev截图
cd ../ios
fastlane upload_dev_screenshots

如果是Prod环境,把lane名称换成upload_prod_screenshots即可。

不用Fastlane的替代方案

要是不想折腾Fastlane,也可以直接用官方命令行工具:

  • Android:用google-play-publisher CLI上传截图,不过配置步骤和Fastlane差不多,没有明显优势。
  • iOS:用altool命令,示例如下:
xcrun altool --upload-screenshots -f ./fastlane/screenshots/ios/prod -u "你的Apple ID" -p "应用专用密码" --bundle-id "com.your.app.prod"

但Fastlane封装了很多细节,比如自动重试、凭据管理,在CI环境里用起来更省心。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:00:53