# 多端交付：微信小程序、安卓 App、小红书小工具

同一个应用、同一个代码仓库，除了网站还能同时交付微信小程序、安卓 App 和小红书小工具。这篇讲每种形态怎么开始、预览和发布分别做了什么、最后用户从哪里拿到它。

> 前置阅读：`02-apps.md`（应用怎么建、配置向导在填什么）和 `04-publish.md`（预览、合并、发布的区别）。

## 一个应用能同时交付几个端

| 形态 | 怎么开始 | 用户最后从哪拿到 |
|---|---|---|
| Web 网站 / 后台 / API | 默认形态，建应用就有 | 生产域名 |
| 微信小程序 | 配置向导填 AppID 等三个字段，再在 Chat 里让 Agent 写小程序工程 | 微信公众平台，你自己提交审核上线 |
| 安卓 App | 在 Chat 里说要安卓端，Agent 建安卓工程 | 你自己网页上的下载入口 |
| 小红书小工具 | 在 Chat 里说要小工具 | Chat 里下载 zip，你自己传到小红书 |

微信小程序和小红书小工具**只有中国大陆节点有**；安卓 App 国内海外都能做。iOS 目前不支持。

它们共用一个仓库，不需要为每个端各建一个应用。

## 微信小程序

### 先把三个字段填上

在配置向导的「微信小程序」一步填，都可以留空：

| 字段 | 干什么用 |
|---|---|
| AppID | 小程序标识 |
| AppSecret | 小程序登录鉴权 |
| 代码上传密钥 | **只给平台自动上传小程序代码用**，是一份 RSA 私钥原文 |

三者用途不同，缺哪个影响哪件事。上传密钥属于敏感字段，填进去之后不会再回显，也不会出现在任何部署配置里——**在配置里看不到它是设计如此，不代表你没填**。

### 预览和发布分别做了什么

小程序的出包挂在 Web 端部署之后，是同一个按钮触发的两件事：

| 你点了 | 小程序这边发生什么 |
|---|---|
| 👀 预览 | 上传**体验版**，并生成一张体验版二维码，扫码就能在手机上看 |
| 🚀 发布 | 把代码传到微信「版本管理 → **开发版本**」 |

**发布到此为止，平台的活就干完了。** 后面的「提交审核 → 发布上线」必须你自己去微信公众平台操作，平台不会替你上线——这是微信的规则，不是平台偷懒。

体验版二维码按 Chat 区分，不同 Chat 预览出来的是不同的二维码；地址会随部署配置下发给应用，页面上放一个扫码入口就能直接用。

上传是 Web 端部署成功之后的**最佳努力**步骤：小程序上传失败只会标记失败，不会把已经成功的 Web 发布回滚掉。

### 发布完在微信里找不到代码

先看那条消息里「上传微信小程序代码」这一步的状态，再判断原因，不要一上来就怀疑密钥没配：

| 步骤状态 | 多半是什么情况 |
|---|---|
| 成功 | 代码在「开发版本」里，常见是看错了位置（看成了线上版本或体验版） |
| 失败 | 微信侧「小程序代码上传」开了 IP 白名单没放行，或上传密钥无效 / 不是 PEM 格式的 RSA 私钥原文 |
| 跳过 / 没有这一步 | 才考虑没配 AppID 或上传密钥，或者这个应用根本还不是小程序工程 |

## 安卓 App

### 怎么开始

在 Chat 里说一句「给这个应用加一个安卓端」就行。Agent 会在仓库里建安卓工程并登记好，你不用填任何东西——配置向导最后一步的「安卓 App」是**只读**的一页，新建应用时整步隐藏，出过包之后才出现。

包名由平台生成，**第一次出包时定死，之后不能再改**（改了已经装在用户手机上的包就升级不了了）。最低支持 Android 7.0。

### 出包时机

跟 Web 一样挂在预览和发布上：

| 你点了 | 出的是什么包 |
|---|---|
| 👀 预览 | 调试包（debug），可以扫码试装 |
| 🚀 发布 | 正式签名包（release） |

一次构建通常 3~8 分钟，**同一时间只能有一个构建在跑**，排队时等前一个结束即可。

### 签名密钥

第一次出安卓包时，平台自动生成一份签名密钥并托管起来，你不需要准备任何东西。

配置向导的「安卓 App」一页有 **导出备份** 按钮（没出过包时是灰的，点了会二次确认）。导出会下载一个 `.jks` 文件，并在页面上显示密钥别名和两个口令——**口令只显示这一次，切走这一步就清空了**，当场存好。

> 只有文件、没有口令是签不了名的，两样都要留。密钥丢了没有补救办法，已经发出去的包也就没法再升级。平台自己存了一份，但强烈建议你也存一份。

### 构建记录和下载

同一页往下是构建记录列表，每条显示环境、类型（调试包 / 正式包）、状态、版本号、大小和时间，失败的会带一句错误摘要。可以按环境筛选，**列表不会自动刷新，状态变了要手动点一下「刷新」**。构建成功的那几条可以直接下载安装包，你自己验包用这里最快。

用户下载安装包的入口在**你自己的网页上**，平台不做统一下载页：构建成功之后再部署一次，下载地址会随部署配置下发，页面上的下载入口就出现了。让 Agent 同时放「点击下载」和二维码两个入口，手机扫码装最省事。

调试包和正式签名包用的是同一把密钥、版本号也走同一条序列，所以**扫码试装过测试版的手机可以直接覆盖安装正式版，不用先卸载**。

## 小红书小工具

只有中国大陆节点有这个形态。

它是一份**离线 H5 zip**：纯本地运行、不联网、调不了你应用的后端，和网站、小程序不是同一套运行时。适合放规则明确、算完就出结果的小工具。

- 源码进仓库（通常在 `xhs-minitool/` 下），打包好的 zip 在 Chat 的产物列表里下载
- **平台不会替你传到小红书**，也没有体验版二维码和上传密钥这类配置项
- 拿到 zip 之后，你自己到小红书创作者后台上传

## 常见疑问

**Q：三个端要建三个应用吗？**
A：不用。同一个应用、同一个仓库，Agent 在里面分别放 Web、小程序工程和安卓工程，预览和发布时一起处理。

**Q：小程序发布成功了，为什么线上的小程序没变？**
A：平台只把代码传到「开发版本」，提交审核和发布上线要你在微信公众平台做。这是微信的流程，任何第三方都替不了。

**Q：安卓包能传到应用商店吗？**
A：可以。平台负责出正式签名包、也能把签名密钥导出给你，上架各家商店由你自己去传。

**Q：有 iOS 吗？鸿蒙呢？**
A：iOS 不支持。鸿蒙 4 及更早的版本能装安卓包；HarmonyOS NEXT 不支持。

**Q：我不做小程序也不做 App，会不会平白多出一堆东西？**
A：不会。这些形态都要你明确提出来才会有，默认只有 Web 端。

下一步推荐：`10-media.md`
