在 VSCode 里点一下,8 个商店同时传完了

本文是「告别手动发版」系列第 2 篇。

系列目录:

  • 第 1 篇:总览
  • 第 2 篇:VSCode 插件实战(本文)
  • 第 3 篇:CLI 实战与 CI/CD 集成
  • 第 4 篇:8 平台 API 踩坑实录

开始之前

安装 VSCode 扩展:市场搜索 "Flu CLI" → 安装。

打开方式:右键项目根目录 → Flu: 发布中心


三种发布模式

发布中心顶部有三个模式标签,按需选择:

模式 谁用 做什么
🏗️ 仅构建 Flutter 开发者 编译出 APK/IPA,不上传
🚀 全量流水线 Flutter 开发者 编译 + 上传一气呵成
📦 仅上传 所有 App 开发者 有安装包直接传,不限框架

重点:如果你不是 Flutter 开发者,直接用"仅上传"模式。 打开发布中心后,如果检测到当前项目不是 Flutter 项目,界面会自动精简------模式标签和构建配置直接隐藏,只留上传相关的操作。


实战一:仅上传模式(所有开发者通用)

这是受众最广的模式。不管你用什么框架,只要有安装包就能用。

Step 1:选择安装包

选文件的一瞬间,工具自动做了这些事:

格式 自动解析 用什么解析
APK 包名 + 版本号 + 构建号 aapt2 dump badging
IPA Bundle ID + 版本号 + 构建号 plutil 解析 Info.plist
HAP Bundle Name + 版本号 解压读 module.json

不用手动填版本号,选文件就行。

Flutter 项目额外福利

如果你是 Flutter 项目,还有一个 "⚡ 一键同步" 按钮:

一个按钮做三件事:

  1. pubspec.yaml 读取包名和版本号
  2. 加载上次保存的密钥配置
  3. 扫描 build/ 目录,找到已编译的安装包

外部包自动识别

测试同事扔给你一个别人编译的 APK,包名和当前项目不一样------

界面自动切换:

  • 出现 "⚠️ 外部包模式" 标签
  • 工程设置隐藏(外部包不需要工程配置)
  • 版本号从安装包里解析,不读当前项目的 pubspec.yaml

删掉外部包后,界面自动切回工程模式。全程不需要手动切换。

Step 2:选择分发渠道

勾选你要上传的平台,右侧清单栏实时更新。

Step 3:配置密钥

这是第一次使用时最花时间的一步------但只需要配一次。

每个平台一张折叠卡片,展开后:

  • 输入框标注了需要填什么(Client ID、Secret 等)
  • ❓ 帮助按钮------点一下告诉你密钥在哪个后台、哪个页面申请,附官方文档链接
  • 保存方式三选一:
方式 存在哪 下次还在吗 适合
⚡ 仅本次 内存 关掉就没了 临时测试
📁 保存至本地 项目配置文件 日常使用(默认)
🌍 全局默认 ~/.flu-cli/config.json 在,且跨项目 多项目共享密钥

密钥存在本地,不提交 Git,不上传服务器。下次打开发布中心,自动加载。

各平台需要什么密钥

平台 需要填什么 在哪申请
蒲公英 API Key pgyer.com/account/api
华为 App ID + Client ID + Client Secret AGC 控制台 → 用户与权限 → API 客户端
小米 邮箱 + 公钥证书 小米开放平台 → 发布管理 → 自动发布设置
OPPO Client ID + Client Secret OPPO 开放平台 → 管理中心 → 应用详情
vivo Access Key + Access Secret vivo 开放平台 → 管理中心 → API 接入
应用宝 App ID + App Key 腾讯开放平台 → 应用基本信息
App Store Apple ID + App 专用密码 appleid.apple.com
鸿蒙 Client ID + Client Secret 同华为

这些信息,每个平台的 ❓ 帮助按钮点一下就能看到。不用收藏这个表。

Step 4:开始上传

点击"开始执行任务",界面切换到 Dashboard 看板

左侧------每个平台一张任务卡片:

css 复制代码
📤 上传任务
┌────────────────────────────┐
│ 🚀 蒲公英           [完成] │
│ 🤖 Android   ✅ 已上传     │
├────────────────────────────┤
│ 🏪 华为             [上传中] │
│ 🤖 Android   ████████░ 85% │
├────────────────────────────┤
│ 🏪 小米             [上传中] │
│ 🤖 Android   ██████░░░ 60% │
├────────────────────────────┤
│ 🏪 OPPO             [等待中] │
│ 🤖 Android   ░░░░░░░░ 0%   │
└────────────────────────────┘

右侧------动态详情面板,根据阶段自动切换。

底部------实时日志:

erlang 复制代码
📤 将要上传到 4 个渠道
✅ 蒲公英上传完成 → 下载链接已生成
⬆️ 华为上传中 85%...
⬆️ 小米上传中 60%...
✅ 华为上传完成
✅ 小米上传完成
✅ OPPO 上传完成
🎉 全部上传完成!4/4 成功

Step 5:获取结果

上传完成后,结果面板显示:

  • 📊 成功/失败统计
  • 🔗 各平台下载链接 + 📋 一键复制
  • 🏪 前往后台 --- 跳转到对应平台管理后台
  • 🔍 查看二维码 --- 蒲公英专属
  • 📋 一键复制所有链接 --- 全部链接打包复制,直接发群里

复制链接,丢群里,收工。


实战二:全量流水线模式(Flutter 专属)

Flutter 开发者的一条龙服务:编译 → 上传。

Step 1:配置

配置面板包含:

  1. 📁 工程设置 --- 点"⚡ 一键同步"自动读取 pubspec.yaml
  2. 🏗️ 构建平台 --- 勾选 Android / iOS
  3. 📝 版本策略 --- 保持 / 修订 / 次版本 / 主版本
  4. 🌎 分发渠道 --- 勾选要上传的平台
  5. 🔑 密钥配置 --- 折叠式卡片,按需展开
  6. 📝 更新日志 --- 支持按平台自定义

版本号递增策略:

策略 当前 1.0.0+1 的结果
保持不变 1.0.0+1
修订版本 (Patch) 1.0.1+2
次版本 (Minor) 1.1.0+2
主版本 (Major) 2.0.0+2

Step 2:构建 → 确认 → 上传

点击"开始执行任务"后:

css 复制代码
选平台 + 选渠道 + 填版本号 → 开始
    ↓
🏗️ 编译(实时进度条)
    ↓
✅ 编译完成 → "是否开始上传?" [取消] [确认]
    ↓
📤 并行上传到所有渠道
    ↓
📊 结果汇总

编译完会停下来问你------万一编译成功了但你发现忘改什么东西,可以中断不传。不是无脑一路到底。


实战三:仅构建模式(Flutter 专属)

只编译出安装包,不上传。适合:

  • 先验证能不能编译通过
  • 出包给测试手动安装
  • 出包后稍后再用"仅上传"模式传

界面只保留构建相关的配置,分发渠道区直接隐藏。


失败了怎么办

单个平台失败

其他平台不受影响。失败的卡片变红,显示具体错误信息 + 🔄 重试按钮。

点一下只重试那一个,不用全部重来。

自动重试策略

底层内置了智能重试:

错误类型 会自动重试吗 说明
网络超时、连接拒绝 ✅ 会 等 1s → 2s → 4s,最多 3 次
服务器 500/502/503 ✅ 会 指数退避 + 随机抖动
限流 429 ✅ 会 等待后重试
认证失败 401/403 ❌ 不会 密钥错了,重试没意义
参数错误 400 ❌ 不会 请求本身有问题

网络抖动不用管,工具自己会重试。密钥错了会直接告诉你,不浪费时间。


非 Flutter 项目的界面

如果你在一个非 Flutter 项目目录下打开发布中心:

  • 模式标签消失(构建用不了,所以不显示)
  • 工程设置消失(没有 pubspec.yaml
  • 只留核心操作:选文件 → 选渠道 → 配密钥 → 上传

界面越简单,上手越快。


上传后各平台会发生什么

建议收藏这张表,发版前看一眼:

平台 上传后 你还需要做什么
蒲公英 直接可下载,生成二维码 分享链接即可
华为 默认存草稿(可配自动提审) 去后台确认后提审,或配置 submit
鸿蒙 同华为 同华为
小米 直接提交审核 确认包没问题再传(无草稿状态)
应用宝 直接提交审核 确认包没问题再传(无草稿状态)
OPPO 包和版本信息已提交 建议去后台确认后提审
vivo 包和版本信息已提交 建议去后台确认后提审
App Store IPA 传到 App Store Connect 去后台选版本、填信息、提审

小米和应用宝没有草稿状态,上传即提审------确认包没问题再传。


配置文件:flu_release.yaml

如果你喜欢用配置文件管理(方便团队共享、CI/CD 场景),可以在项目根目录创建 flu_release.yaml

yaml 复制代码
# 构建配置
build:
  android:
    type: apk # apk | appbundle
    flavor: # 可选:应用风味
    buildName: '1.0.0'
    buildNumber: '1'
  ios:
    scheme: Runner
    exportMethod: app-store # app-store | development | ad-hoc
    teamId: # 可选

# 发布配置
publish:
  pgyer:
    enable: true
    apiKey: 'your-api-key'

  huawei:
    enable: true
    appId: 'your-app-id'
    auth:
      clientId: 'xxx'
      clientSecret: 'xxx'
    releaseType: draft # draft(草稿)| submit(直接提审)

  xiaomi:
    enable: true
    auth:
      userName: 'xxx@example.com'
      privateKey: '/path/to/private.pem'

  app_store:
    enable: true
    auth:
      appleId: 'xxx@xxx.com'
      appPassword: 'app-specific-password'

# 重试策略
retry:
  maxRetries: 3
  initialDelayMs: 1000
  backoffMultiplier: 2

发布中心会自动加载这个文件,配置文件和可视化界面可以混用------文件里写了密钥,界面里就自动填上了。


小结

操作 传统方式 发布中心
上传 8 个平台 逐个登录后台,2 小时 勾选 + 一键,10 分钟
密钥管理 到处找,经常忘 配一次,自动加载
构建 + 上传 手动跑命令 + 手动传 一条龙,中间可暂停确认
失败处理 全部重来 单个重试
非 Flutter 项目 一样要逐个传 选文件直接传

下一篇预告

不喜欢 GUI?喜欢命令行?想集成到 CI/CD?

下一篇讲 app-ship CLI ------npm install -g app-ship,一行命令传 8 个平台。


觉得有用?

  • 👍 点赞 --- 让更多被发版折磨的人看到
  • 收藏 --- 下个发版日翻出来用
  • 💬 评论 --- 说说你被哪个平台折磨过

关注公众号「火叶」,第一时间获取系列更新和实战干货。回复 "flu" 加入开发者交流群。


「告别手动发版」系列 · 第 2 篇

完整文档 · 源码仓库 · VSCode 插件市场 · app-ship npm

公众号:火叶 · 交流群:微信 Huoye-TT 备注 "flu-cli"

相关推荐
TT_Close1 小时前
看懂 VSCode 发布中心后,下一步该把 App 发版交给 CLI 了
npm·开源·app
formulahendry2 天前
ACP UI 大战 VS Code Agents app:谁才是真正的跨平台 Agent 客户端?
visual studio code·vs code·acp
golang学习记3 天前
五年, Zed 1.0正式发布:VS Code慌了?
visual studio code
Cosolar4 天前
告别无脑循环:深入解析 ReWOO 与 Plan-and-Execute Agent 架构
人工智能·面试·全栈
河北清兮网络科技4 天前
广告联盟全解析:从开发接入到运营优化,多视角拆解流量变现逻辑
小程序·app
私人珍藏库4 天前
[Android] 自动连点器max1.0
android·app·工具·软件·多功能
ZZH_AI项目交付6 天前
我 Vibe Coding 了一个 iOS / Flutter 项目的 AI 代码改动检查工具
app·aigc·ai编程
前端双越老师6 天前
3 个命令 7 个步骤,学会 git worktree 并行开发
git·ai编程·全栈
hamber7 天前
用 Flutter 造一台掌机
flutter·ai编程·全栈