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

Fastlane中upload_to_play_store自动填充多Flavor包名求助

实现Fastlane自动遍历Android多Flavor并上传到Play Store

方案1:硬编码Flavor列表(简单直接)

适合Flavor列表固定的场景,直接在Fastfile中定义Flavor数组,逐个获取applicationId并上传:

lane :upload_all_flavors do
  # 定义所有需要上传的Flavor
  flavors = ['flavor1', 'flavor2', 'flavor3', 'flavor4']
  
  flavors.each do |flavor|
    # 执行gradle properties命令,提取当前Flavor的applicationId
    gradle_output = gradle(
      task: "properties",
      flavor: flavor,
      build_type: "release",
      project_dir: "android/",
      print_command: false
    )
    application_id = gradle_output.match(/applicationId: (.*)/)[1].strip
    
    # 上传对应Flavor的AAB到Play Store
    upload_to_play_store(
      package_name: application_id,
      release_status: releaseStatus,
      changes_not_sent_for_review: shouldSendReview,
      # 指定对应Flavor的AAB文件路径,根据你的gradle配置调整
      aab: "android/app/build/outputs/bundle/#{flavor}Release/app-#{flavor}-release.aab"
    )
    
    UI.success("已完成 #{flavor} 版本的上传")
  end
end

关键说明:

  • gradle properties命令会输出当前构建变体的所有属性,通过正则/applicationId: (.*)/提取包名。
  • 必须指定aab参数,因为多Flavor打包后,每个变体的AAB文件存放在单独的目录(flavorRelease)下,路径要和你的gradle输出目录一致。

方案2:动态获取Flavor列表(灵活扩展)

如果Flavor会频繁新增/修改,可以通过解析gradle任务输出来动态获取所有Flavor,避免硬编码:

# 辅助方法:从gradle任务输出中提取所有Flavor名称
def get_all_android_flavors
  tasks_output = gradle(
    task: "tasks",
    project_dir: "android/",
    print_command: false
  )
  # 匹配所有带Release后缀的Flavor任务,提取Flavor名称
  flavor_names = tasks_output.scan(/(\w+)Release/).flatten.uniq
  UI.message("检测到的Flavor列表:#{flavor_names.join(', ')}")
  flavor_names
end

lane :upload_all_flavors do
  flavors = get_all_android_flavors
  
  flavors.each do |flavor|
    # 同方案1,获取applicationId并上传
    gradle_output = gradle(
      task: "properties",
      flavor: flavor,
      build_type: "release",
      project_dir: "android/",
      print_command: false
    )
    application_id = gradle_output.match(/applicationId: (.*)/)[1].strip
    
    upload_to_play_store(
      package_name: application_id,
      release_status: releaseStatus,
      changes_not_sent_for_review: shouldSendReview,
      aab: "android/app/build/outputs/bundle/#{flavor}Release/app-#{flavor}-release.aab"
    )
    
    UI.success("已完成 #{flavor} 版本的上传")
  end
end

注意事项:

  • 确保每个Flavor对应的应用已经在Google Play控制台创建,且服务账号拥有该应用的上传权限。
  • 如果gradle输出格式变化,需要调整正则表达式以正确提取applicationId或Flavor名称。
  • 执行前确保已经通过gradle clean bundle生成了所有Flavor的AAB包,否则会提示文件不存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:15:41