如何为多Flavor的Flutter应用初始化Fastlane并处理多包名?
多Flavor Flutter应用的Fastlane配置指南(适配Android+iOS)
初始化Fastlane不用纠结单一包名
不管是在android还是ios目录下执行fastlane init,遇到要求输入包名时随便填个占位值就行,后续我们会在配置文件里动态指定不同Flavor的包名,Fastlane完全支持多环境配置,不用在初始化阶段绑定死。
Android端多Flavor配置步骤
- 编写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建子文件夹管理,便于维护。
- 确认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配置步骤
- 编写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-publisherCLI上传截图,不过配置步骤和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
相关产品推荐
相关产品推荐

