本文是「摸鱼指南 · 告别手动发版」系列第 1 篇。
系列目录:
- 第 1 篇:总览(本文)
- 第 2 篇:VSCode 插件实战
- 第 3 篇:CLI 实战与 CI/CD
- 第 4 篇:8 平台 API 踩坑
嘘🤫跟你说个事,别声张
上个月发版日,我和隔壁工位同时开始发版。
产品经理丢来一句:"测试过了,今天发。"
我打开电脑,8 个应用商店排着队等我伺候——
华为:登我后台!传 APK!填更新说明!
小米:该我了!OPPO:下一个我!vivo:别忘了我!
应用宝:我也要——App Store:IPA 呢?鸿蒙:我也要传!蒲公英:测试催链接了!
"这种场面我还是可以控制的。"
然后——华为上传失败了,重来。小米密码忘了,等验证码。OPPO 版本号重复,重新打包。iOS 的 Transporter 卡在 80% 不动。
2 小时后,我终于把链接发群里。回头一看——隔壁已经在刷手机了。
"你传完了?""早传完了,10 分钟的事。"
他打开 VSCode,勾了 8 个平台,点了"开始",去接了杯水。回来的时候全传完了,链接自动汇总好了。
不是他比我快,是他根本没在手动做这件事。
痛在哪
每次发版你在重复的动作:登录后台 → 找应用 → 传包 → 填说明 → 等进度 → 复制链接 → 汇总发群。7 步,0 技术含量,×8 个平台。
再想想密码管理——华为的上次改过、小米的存在哪个备忘录、OPPO 要手机验证码但手机不在手边、App Store 的专用密码过期了吗……
8 套账号,每套都可能忘密码,每套登录方式都不一样。没有任何技术含量,却每次消耗你 2 小时。
一个被忽略的事实
你用 Flutter,同事用 React Native,隔壁组写原生。框架不同,但有一件事完全一样:上传到应用商店的痛苦。
打包是框架的事——flutter build、./gradlew assembleRelease、xcodebuild,各管各的。
但上传?不管 APK 是 Flutter 编译的还是 Kotlin 写的,传到华为商店登的是同一个后台,填的是同一份字段,等的是同一根进度条。
打包和上传是两件事。打包跟框架绑定,上传跟框架无关。有包就能传,不问你用什么写的。
我们做了什么
对接了 8 个应用商店的 API,把认证、上传、提审全部封装了。不吹,直接看验证状态:
| 平台 | 认证方式 | 状态 |
|---|---|---|
| 蒲公英 | API Key | ✅ 已验证 |
| 华为 AppGallery | OAuth2 | ✅ 已验证 |
| 小米应用商店 | RSA 公钥签名 | ✅ 已验证 |
| OPPO 应用商店 | HMAC-SHA256 | ✅ 已验证 |
| vivo 应用商店 | HMAC + MD5 | ✅ 已验证 |
| 腾讯应用宝 | HMAC-SHA256 | ✅ 已验证 |
| App Store | Transporter + Apple ID | ✅ 已验证 |
| 鸿蒙应用市场 | OAuth2 | ✅ 已验证 |
OAuth2、RSA、HMAC-SHA256……你不需要知道这些。填一次密钥,剩下的全部由工具处理。
三种发布模式
| 模式 | 做什么 | 谁用 |
|---|---|---|
| 全量流水线 | 编译 + 上传一气呵成 | Flutter 开发者 |
| 仅构建 | 只编译出安装包,不上传 | 先验证构建 |
| 仅上传 | 有安装包就能传 | 所有 App 开发者 |
不是 Flutter 开发者?没关系,"仅上传"就是为你设计的。React Native 编译完拿到 APK,选文件直接传。原生、鸿蒙同理。
上传之外
密钥管理:配一次,下次自动加载,存在本地不上传。每个平台旁有帮助按钮,告诉你密钥在哪申请。
失败重试:8 个平台同时传,某一个失败不影响其他 7 个,点一下只重传那一个。网络超时自动重试,认证错误不浪费时间。
安装包自动识别:选了 APK 自动解析包名版本号,IPA 自动解析 Info.plist,HAP 自动读 module.json。不用手动填。
结果汇总:上传完成后所有链接一键复制,蒲公英自动生成二维码,丢群里收工。
上传后各平台会怎样
| 平台 | 上传后 | 你还需要做什么 |
|---|---|---|
| 蒲公英 | 直接可下载,生成二维码 | 分享链接即可 |
| 华为/鸿蒙 | 默认存草稿(可配自动提审) | 后台确认后提审,或配置 submit |
| 小米 | 直接提交审核 | 确认包没问题再传(无草稿) |
| 应用宝 | 直接提交审核 | 确认包没问题再传(无草稿) |
| OPPO/vivo | 包和版本信息已提交 | 建议去后台确认后提审 |
| App Store | IPA 传到 Connect | 去后台选版本、填信息、提审 |
注意:小米和应用宝上传即提审,这是平台 API 决定的。华为/鸿蒙最灵活,可配 draft 或 submit。
手动 vs 自动
| 手动发版 | 自动发版 | |
|---|---|---|
| 耗时 | 2+ 小时 | 10-15 分钟 |
| 密钥 | 到处找,经常忘 | 配一次,自动加载 |
| 上传 | 逐个登录、拖文件、等进度 | 8 平台并行,一键完成 |
| 失败 | 全部重来 | 单个重试 |
| 链接 | 逐个复制汇总 | 一键复制全部 |
| 适用 | — | 所有 App 开发者,不限框架 |
开始使用
VSCode 插件(推荐):扩展市场搜索 "Flu CLI" → 安装 → 右键项目 → Flu: 发布中心
CLI 命令行:
npm install -g @huoye/app-ship
app-ship init # 生成配置文件
app-ship upload -c app-ship.yaml -f app-release.apk
npm 库:
import { createUploadManager } from '@huoye/app-ship'
const manager = createUploadManager({ maxConcurrent: 3 })
await manager.uploadToMultiplePlatforms('./app.apk', config, metadata)
三种方式,底层同一套引擎,上传能力完全一致。
这个系列会讲什么
| 篇章 | 内容 | 适合谁 |
|---|---|---|
| 第 2 篇 | VSCode 发布中心完整操作教程 | 喜欢可视化界面的开发者 |
| 第 3 篇 | app-ship CLI 从安装到 CI/CD 集成 | 命令行爱好者 / DevOps |
| 第 4 篇 | 对接 8 个应用商店 API 的踩坑实录 | 技术人(干货向,建议收藏) |
发版这件事,不该消耗你的脑力,它只该消耗带宽。
觉得有用?
-
👍 点赞 — 让更多被发版折磨的人看到
-
⭐ 收藏 — 下个发版日翻出来用
-
💬 评论 — 你被哪个商店折磨得最惨?
关注公众号「火叶」,第一时间获取系列更新与 API 踩坑干货。
「摸鱼指南 · 告别手动发版」 · 第 1 篇