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

