一批鸿蒙应用更新消息集中出现时——无畏契约:源能行动上架,小艺更新,小游戏更新,鲨鱼记账更新,支付宝更新,华为浏览器与华为商城也更新——很多人的第一反应是打开应用商店确认一下。换一个视角,这批消息本身就是观察鸿蒙生态最直接的样本。应用可以持续上架、更新、分发,说明开发链路、签名体系、审核流程和用户端安装通道已经能承载真实业务,而不只是停留在开发套件演示阶段。
对鸿蒙开发者来说,这类更新动态比应用商店里的“新功能”三个字更有价值。每一次“XX更新了”,背后都对应一次版本号变更、一次打包签名、一轮审核、一次灰度发布,以及成千上万台设备上的下载安装。这篇文章不评价某个应用的新功能,而从这批更新消息出发,拆解鸿蒙应用从“开发完成”到“用户看到更新成功”要经历的技术链路,并说明不同类型的应用在迭代时有哪些不同工程重点。
1. 一批应用更新消息,为什么值得从工程角度看
1.1 把消息拆开,能看到四类不同的应用形态
材料里的更新消息看起来凌乱,其实可以分成几类:
| 应用 | 类型 | 工程观察点 |
|---|---|---|
| 无畏契约:源能行动 | 大型游戏 | 首次上架,涉及包体、资源管理、权限和硬件适配 |
| 小艺 | 系统级智能助手 | 与系统能力深度绑定,更新可能依赖新系统 API |
| 小游戏 | 轻量游戏 | 包体限制严格,资源和版本管理方式与普通应用不同 |
| 鲨鱼记账 | 第三方工具类应用 | 涉及用户数据存储、隐私声明和权限收敛 |
| 支付宝 | 第三方金融应用 | 对安全、隐私、合规要求极高,审核链路更严格 |
| 华为浏览器、华为商城 | 系统发布方应用 | 使用应用市场更新通道完成系统级能力迭代 |
| TesIa(材料中名称) | 暂无法确认 | 缺少可信背景,不据此做技术判断 |
这不是一次简单的“应用推送合集”。消息里既有首次上架,也有存量应用的持续更新,还覆盖了系统应用、第三方支付、大型游戏、小游戏和常用工具。能同时出现这么多类型,说明鸿蒙应用市场已经具备完整的分发和迭代能力。
1.2 “上架”和“更新”并不是同一个动作
初次上架要解决的是“用户能不能找到并安装这个应用”。持续更新要解决的是“已经安装的用户能不能平滑升级到新版本”。两个动作共享同一套签名、审核和分发体系,但面对的工程问题不同。
上架阶段更关注资质、隐私政策、图标截图、目标设备、首次审核是否通过。更新阶段更关注版本号是否递增、签名是否一致、灰度范围是否合理、有没有引入系统新 API 导致老设备不兼容。
从消息看,无畏契约:源能行动是“上架”,属于应用首次推出;小艺、鲨鱼记账、支付宝、华为浏览器等是“更新”,说明这些应用已经进入常规迭代节奏。两类消息一起出现,恰好覆盖了开发者最关心的两个节点:让新应用可用,让旧应用持续可用。
1.3 对鸿蒙开发者的判断价值
普通用户看这条消息,看到的是“又有新玩意了”。开发者应该看到的是“一次完整版本交付至少包含哪些环节”。如果连后续更新都无法完成,说明应用生态是静态的;只有当一批应用能按各自节奏持续更新,生态才算真正活跃。
本文后续分析按鸿蒙原生应用的常规工程流程展开。材料没有给出具体系统版本、API 等级或应用包类型,因此涉及事实细节的地方会使用保守表述。落地到自己的项目时,依赖、SDK 版本和 IDE 提示以实际开发环境为准。
2. 鸿蒙应用的交付形态,决定了更新机制和安卓不同
2.1 HAP、HAR、HSP 和 Feature 模块分别负责什么
很多人刚接触鸿蒙开发时,会下意识把 HAP 当成 APK 的鸿蒙版本。这个类比能帮助理解,但不够准确。
APK 是 Android 应用的统一安装包。鸿蒙应用的主要交付单元则是 HAP,即 HarmonyOS Ability Package。一个能力组件被打包到 HAP 中,应用市场分发、用户设备安装时,主要针对 HAP 进行处理。更完整的应用发布包是 App Pack,后缀为 .app,一个 .app 由多个 HAP 组成。
除了 HAP,工程里还常见 HAR 和 HSP:
| 包类型 | 名称 | 用途 | 典型场景 |
|---|---|---|---|
| HAP | HarmonyOS Ability Package | 应用的主体单元 | 应用大小分成多个能力包时,每个模块一个 HAP |
| HAR | HarmonyOS Archive | 静态共享包 | 多模块复用代码和资源,编译期引入 |
| HSP | HarmonyOS Shared Package | 动态共享包 | 多个 HAP 运行时共享代码,支持独立升级 |
| Feature 模块 | 功能模块工程 | 按业务拆分的模块 | 把大型项目拆成多个 entry/feature 模块,降低启动安装体量 |
理解这些包类型,再看应用更新就不会只有一个笼统概念。游戏或大型商城类应用,更新时可能只下载其中一个 feature 模块,而不是把整个应用重新安装一遍。
2.2 版本号、权限和签名在配置文件里如何体现
鸿蒙工程中,app.json5负责应用级配置。首次创建工程时,IDE 会自动生成 bundleName、versionName、versionCode 等字段。以常见工程为例,配置形如:
{ "app": { "bundleName": "com.example.demo", "vendor": "example", "versionCode": 1000000, "versionName": "1.0.0", "icon": "$media:app_icon", "label": "$string:app_name" } }其中versionCode用于系统判断版本新旧,每次发布新包必须比线上版本大。versionName是面向用户展示的版本字符串。如果 versionCode 没有正确递增,用户设备可能认为没有新版本。
模块级配置存放在module.json5。这里既声明模块类型和设备类型,也声明应用需要的权限。以下是一段最小示例:
{ "module": { "name": "entry", "type": "entry", "description": "$string:module_desc", "mainElement": "EntryAbility", "deviceTypes": [ "phone", "tablet" ], "requestPermissions": [ { "name": "ohos.permission.INTERNET" } ], "abilities": [ { "name": "EntryAbility", "srcEntry": "./ets/entryability/EntryAbility.ets", "description": "$string:EntryAbility_desc", "icon": "$media:icon", "label": "$string:EntryAbility_label", "startWindowIcon": "$media:icon", "startWindowBackground": "$color:start_window_background", "exported": true, "skills": [ { "entities": [ "entity.system.home" ], "actions": [ "action.system.home" ] } ] } ] } }requestPermissions里的权限必须与应用实际能力匹配。上架审核阶段,常见驳回原因之一就是代码里申请了不使用的权限,或权限说明无法让审核人员理解用途。
2.3 为什么设备能识别“有新版本”
应用市场检测新版本的核心逻辑很简单:线上新包的 versionCode 高于用户当前安装包的 versionCode,就提示可更新。真正复杂的是更新包下载完成后的校验。
更新包不是下载完就能安装。设备会检查包签名是否与当前已安装版本一致,防止出现把同名但不同开发者的应用覆盖安装的情况;会检查目标 SDK 等级是否超出当前系统支持范围;还会检查设备类型、存储空间和系统版本是否符合要求。
可以这样理解:版本号决定“要不要更新”,签名决定“能不能更新”,系统兼容等级决定“更新后能不能正常运行”。
2.4 用户看到的“更新成功”,其实已经过系统校验
一次完整的应用更新,在用户端至少经历四个阶段:
- 应用市场检测到新版本。
- 用户确认或系统自动下载更新包。
- 系统对包做完整性、签名和兼容性校验。
- 校验通过后安装,下次启动进入新版本。
所以,用户在更新界面看到“已是最新版本”,并不能证明当前安装包真实可运行。开发者的责任是在发布前就确认签名、权限、兼容等级没有问题,否则更新成功的仅仅是安装动作,启动后仍然可能闪退。
3. 从“开发完成”到“用户更新成功”的完整链路
3.1 本地开发调试:先保证工程能编译成 HAP
无论应用上架还是更新,起点都是本地开发。鸿蒙应用通常使用 DevEco Studio 开发,创建工程后先选择支持设备类型,再编写 ArkTS 代码、配置资源和模块。
首次运行建议先连接真机或启动模拟器,通过开发模式安装调试包。这一步要验证的不只是页面能显示,还包括生命周期是否正确、页面跳转是否正常、本地数据是否读写成功、权限弹窗是否按预期出现。很多人把本地调试验证为“能打开”,结果上架后才发现某个低版本设备一启动就异常。
一个好的检查方式是:不只是运行主流程,还要运行几个边界场景,例如断网启动、权限拒绝、存储空间不足。这些场景最容易暴露问题,也最适合在开发阶段提前处理。
3.2 构建、签名和上架申请:同一套代码,不同证书
本地调试时,工程一般使用调试证书。发布给真实用户时,必须使用发布证书和对应的 Profile。发布证书与调试证书不能混用。常见问题是开发者用调试证书打包发布包,导致设备无法正常安装,或者在应用市场审核阶段被拦截。
上传应用市场时,通常要在 AppGallery Connect 创建应用,填写应用名称、分类、隐私政策、权限说明、支持的国家和地区,然后上传构建产物。首次上架还要提供测试说明。更新版本时不一定要重新提交所有资质材料,但版本变更说明、隐私政策调整、权限变化等内容仍然需要同步更新。
如果工程拆分了多个模块,要特别注意每个 feature 模块是否都使用正确的签名配置。一个模块签名错误,可能导致整个更新包在部分设备上安装失败。
3.3 审核与灰度:能上架不等于全量发布
很多新手认为,点击发布后所有用户都会立刻看到新版本。实际流程通常有两道闸门。
审核阶段保证应用内容、隐私和权限声明符合平台规则。审核通过后,开发者还可以设置灰度发布,即只让一定比例的用户看到新版本,观察崩溃率、下载量、卸载量和用户反馈,再逐步扩大比例。
灰度是降低更新风险的有效手段。如果新版本引入了一个只在特定机型上触发的崩溃,全量发售后所有用户都会受到影响;按 5%、10%、30%、50% 分批放量,则可以在问题扩大到全部用户前停住。停住后的处理方式不是让已升级用户自动降级,而是暂停放量并修复问题后发布新版本。因此每次发布前都应该想清楚:如果出问题,回滚动作是什么,紧急修复版本要多久才能准备好。
3.4 用户端更新流程中的关键节点
从工程技术视角,用户端更新并不简单等同于“下载新包”。应用市场需要准确识别用户当前版本、推送正确的更新包、验证签名一致性,并对不同系统版本选择可安装的包。把流程简化如下:
| 阶段 | 关键动作 | 失败风险 |
|---|---|---|
| 版本检测 | 对比 versionCode | 已是最新版误判,无法检测到更新 |
| 下载 | 从应用市场拉取更新包 | 网络中断、包体过大、设备空间不足 |
| 包校验 | 校验签名和完整性 | 签名不一致导致安装失败 |
| 系统兼容检查 | 检查 API 等级和设备类型 | 设备系统版本过低,拒绝安装 |
| 安装替换 | 事务式替换旧版本 | 安装中断可能导致版本状态异常 |
| 启动验证 | 冷启动加载新文件 | 文件缺失、数据迁移失败导致闪退 |
开发者和测试人员最容易忽略的是“旧版本数据迁移”。例如记账类的鲨鱼记账,新版如果改了本地数据库结构,却没有提供迁移逻辑,用户升级后可能直接闪退或丢失旧数据。数据库结构变更、缓存文件格式变化、云同步协议升级,这些都属于版本更新要处理的隐性工作。
4. 不同类型应用更新,工程重点为什么会不同
4.1 系统级应用更新:更依赖系统能力和发布通道
小艺、华为浏览器、华为商城这类应用,与系统能力的耦合程度比普通三方应用更高。它们的更新可能不只是修改几个页面,还可能依赖系统侧提供的语音识别、渲染内核、账号体系或推送通道。
这类应用更新时,一个关键风险是系统 API 被替换。HarmonyOS 系统能力持续演进,新版本会引入新 API,也会废弃旧 API。若应用仍然调用被废弃接口,在旧版本上可能正常,在新版本设备上则可能找不到方法或行为出现偏差。因此系统级应用做发布前兼容性测试时,往往需要覆盖多个系统版本。
普通开发者也应关注这类应用更新,因为它反映了最新系统能力的方向。小艺更新往往伴随 AI 能力变化,浏览器更新往往伴随内核和渲染能力变化。从应用更新说明里,能间接看出系统正在主推哪些能力。
4.2 第三方工具和金融应用:权限、隐私和数据合规优先
支付宝、鲨鱼记账属于对用户数据高度敏感的应用。这类应用更新时,权限和隐私是最容易出问题的两个点。
权限方面,应用申请越界权限会被应用市场拦截,也会降低用户信任。开发者应遵循最小化原则:只有明确需要的权限才申请,能通过系统能力替代的权限不要申请。读取文件、读取联系人、获取设备信息这些高风险权限,要在隐私政策中逐项解释用途。
隐私方面,更新版本如果新增了数据上传逻辑,用户协议和隐私政策都要同步更新。应用市场审核人员会特别关注:应用为什么要收集这些数据,是否告知用户,是否有明确选项。
这里的核心建议是:不要在产品功能做完后才补隐私文案。功能设计时就应该明确每项数据的采集、存储、使用和删除方式。否则版本更新很容易卡在审核阶段,而不是卡在代码阶段。
4.3 大游戏与小游戏:包体、资源和动态更新策略
游戏类应用更新通常比普通应用更复杂。原因在于游戏包含大量美术资源、音频资源和关卡配置,如果每次小改动都让用户重新下载几百 MB 的应用包,体验成本会非常高。
实际项目中,游戏更新常见做法是“应用壳 + 资源远程加载”。应用包负责承载运行框架,游戏资源通过版本管理服务按需下载。更新时只需要更新资源清单或少量差异资源,不必整包更新。这么做能降低用户升级负担,也提高了版本迭代速度。
小游戏则受到包体限制和应用市场规定的约束。小游戏依赖特定的游戏框架或运行时环境,不同鸿蒙系统版本上的兼容性差异更明显。推送小游戏更新时,除了关注业务逻辑,还要重点测试底层引擎版本变化是否会引入渲染异常、触摸响应问题或资源加载失败。
材料里提到“小游戏更新”,这提醒开发者在鸿蒙生态中不是只有页面型的传统应用,还有轻量游戏这条分支。若计划做小游戏,建议尽早确定引擎选型和资源加载策略,因为这些问题越晚处理,改动成本越高。
4.4 集中更新往往来自新 SDK 或 API 适配
如果多个应用在同一段时间集中更新,并不一定是巧合。常见原因有几个。
第一,系统发布了新版本 SDK,应用为兼容新系统而更新。此时老版本应用可能仍能运行,但部分 API 已经废弃,继续使用会影响稳定性。
第二,应用市场或审核规则调整。比如隐私权限新规发布后,应用需要在新版本里收敛权限、补充隐私说明。第三,安全补丁导致底层组件变化,应用需要跟随更新。
开发者看到一批应用集中更新时,可以顺藤摸瓜去查系统近期的 API 变更日志和权限策略调整,这比单纯看应用功能更有价值。
5. 发布前检查清单:把“更新了”变为“更新成功”
5.1 一次稳健的发布前检查清单
应用更新出问题,绝大多数不是代码写不出来,而是发布流程某个环节没有检查到位。下面这份清单可以在每次发版前逐项核对:
| 检查项 | 具体确认内容 | 常见错误 |
|---|---|---|
| 版本号 | versionCode 已递增并大于线上版本 | 使用旧版本号打包,用户检测不到更新 |
| 签名配置 | 发布证书有效,Profile 与包名匹配 | 误用调试证书或过期证书 |
| 模块完整性 | 多个 HAP/HSP 都已正确签名并打进安装包 | 只更新主模块,漏了 feature 模块 |
| SDK 兼容等级 | compatibleSdkVersion 覆盖目标用户设备 | 兼容等级设得太高,老设备无法安装 |
| 权限声明 | requestPermissions 与实际调用保持一致 | 多申请权限或漏申请关键权限 |
| 隐私政策 | 新权限和新增数据采集行为已同步更新到文案 | 权限说明与文案不一致 |
| 包体大小 | Release 包大小符合预期 | 打入调试符号或冗余资源,包体暴涨 |
| 数据迁移 | 本地数据库、缓存、文件目录升级逻辑已验证 | 旧数据在升级后丢失或导致闪退 |
| 灰度策略 | 已配置初始放量比例和监控指标 | 一次全量发布,异常影响到全部用户 |
| 回滚方案 | 知道如何暂停放量并发布修复版 | 出问题后只能干等,无法止损 |
5.2 三个最容易出现的发布坑
第一个坑是本地能跑,发出去就闪退。常见原因是发布包开启了代码压缩、混淆或资源裁剪,导致某些动态反射、资源配置或 so 库引用失效。开发调试模式往往关掉这些优化,所以问题在开发阶段看不出来。解决办法是在发布前做一次完整 release 构建,并在多台真机上冷启动验证。
第二个坑是版本更新只更新了功能,没有处理旧数据。用户报告“升级后打开白屏”、“账目变空”、“设置丢失”,往往不是新代码写错,而是旧数据没有迁移。数据库表结构变更时,要写升级脚本;缓存目录改变时,要兼容读取旧目录;接口返回结构变化时,要考虑旧版本缓存是否还能解析。
第三个坑是发布后不监控用户反馈,只盯着上传成功状态。应用市场“已发布”只代表更新包已经上架,不代表用户更新后都正常。灰度期间要看崩溃分析、卸载率和差评关键词。如果发现问题,应该立即暂停放量,而不是等用户自己恢复。
5.3 用户看不到更新时,按什么顺序排查
用户侧出现更新异常,通常有四类原因:版本、签名、兼容范围和分发范围。排查顺序建议如下:
| 现象 | 可能原因 | 检查方向 |
|---|---|---|
| 应用市场不提示新版本 | versionCode 未递增 | 对比线上版本和当前包 versionCode |
| 部分用户提示不兼容 | compatibleSdkVersion 设置过高 | 检查 SDK 兼容等级和 deviceTypes |
| 安装到一半失败 | 签名不一致或包体损坏 | 重新生成发布包并核对签名 |
| 用户点击更新后闪烁消失 | 地区、应用市场账号或灰度未覆盖 | 检查分发地区和灰度规则 |
| 更新后启动闪退 | 未适配新系统 API 或数据迁移失败 | 抓取崩溃日志,追溯最近代码变更 |
这里有一个容易忽略的细节:灰度发布时,开发者在后台看到“已发布”,但未进入灰度池的用户无法发现更新。用户不断反馈“没有新版本”时,不一定是代码问题,要先确认灰度范围是否覆盖到对方账户。
6. 普通开发者能从这次更新观察中学到什么
6.1 学会从“版本交付”视角看生态动态
对刚接触鸿蒙开发的人来说,应用更新消息是最容易获得的学习素材。看到某应用更新,可以去应用市场查看它是否同时提供了鸿蒙版本、更新时间、更新说明、支持的最低系统版本。这些信息能帮助判断一个应用的技术路线和适配程度。
更实际的练习是结合自己的设备查看应用详情。例如同一款应用,在兼容 Android 应用的系统和纯鸿蒙设备上,更新机制、应用包类型和权限提示都可能不同。亲自观察这些差异,比死记文档里的概念更有效。
6.2 一套保守的鸿蒙开发学习路径
如果准备进入鸿蒙应用开发,可以按下面顺序练习:
- 先掌握 TypeScript 或 ArkTS 基础语法,熟悉类型、异步、类和接口。
- 再学习 ArkUI 声明式开发,掌握组件、状态管理、页面路由和生命周期。
- 接着做一个小型完整应用,包含列表、详情、表单、本地存储和网络请求。
- 然后学习 Stage 模型、Ability、权限申请和模块化拆分。
- 最后练习打包、签名、模拟器调试和上架流程。
工具准备上,主要是 DevEco Studio、HarmonyOS SDK、预览器和模拟器。上架时再接触 AppGallery Connect。学习环境可以用模拟器快速验证 UI,但涉及摄像头、传感器、蓝牙等能力时,还是需要真机设备。
6.3 搜索热词背后的真实工程问题
从开发者社区常见的搜索词能看出,许多人停留在“想学但不知道卡点在哪”。若干高频话题其实对应不同技能层次:
| 常见话题 | 背后的工程问题 | 建议学习方向 |
|---|---|---|
| 鸿蒙模拟器 | 学习环境搭建 | 先能用模拟器跑通应用 |
| 鸿蒙开发手册 | 文档查阅能力 | 熟练掌握官方文档检索 |
| 鸿蒙 HAR 封装 so | 原生代码与 ArkTS 桥接 | 学习 NAPI、C++ 封装和共享库 |
| 鸿蒙 feature 模块 | 大型应用模块化 | 理解多 HAP/HSP 工程结构 |
| 鸿蒙第三方授权登录 | 账号体系和 OAuth 授权 | 学习登录流程、Token 管理和隐私合规 |
| 鸿蒙结合硬件开发 | 分布式和设备能力开放 | 研究分布式软总线、外设调用 |
| 鸿蒙 vibe coding / AI 辅助开发 | AI 辅助编码实践 | 用 AI 帮助理解 API,但不跳过基础 |
这些话题都不是“刷机”、“绕过限制”等野生玩法,而是正规开发里会真实遇到的技术点。如果能在搜索栏里看到自己的问题,说明已经进入正式开发场景。
6.4 不要混淆 OpenHarmony 与 HarmonyOS 的开发对象
还有一个容易被搜索词误导的概念:OpenHarmony 与 HarmonyOS 不是同一个开发对象。
开源鸿蒙 OpenHarmony 是底层开源项目,主要面向设备厂商、系统集成方和操作系统开发。普通应用开发者日常面对的是 HarmonyOS 或鸿蒙原生应用生态,重点学习 ArkTS、ArkUI、Stage 模型和应用市场发布流程。两者有关联,但入口不同。
做应用开发,优先理解 HAP、签名、开发工具、应用市场上架这些能力即可。系统移植、ROM 定制、设备适配属于更底层的方向,需要操作系统和内核基础,不必作为“鸿蒙应用开发”的第一步。
7. 关于鸿蒙应用更新的四个认知误区
7.1 误区一:鸿蒙应用就是安卓应用改了名字
这是一个最普遍也最危险的误解。仅从用户界面看,很多应用在不同平台上长得相似,很容易让人忽略底层差异。但从包类型来看,纯鸿蒙原生应用的交付单元、应用模型、开发语言和权限模型,与传统安卓应用不同。
鸿蒙应用也可能存在历史安卓兼容形态,不同系统版本策略不同。不能看到“能在鸿蒙设备上运行”,就断定它是鸿蒙原生应用。判断依据不是应用名称,也不是设备品牌,而是应用是否以 HAP 形态发布、是否使用鸿蒙原生能力、是否遵循鸿蒙安全模型。
7.2 误区二:更新只是把版本号加一
版本号加一只是应用市场识别新版本的必要条件,不是充分条件。
一次有效更新至少要完成这些事:新代码正确编译、发布包通过签名校验、不引入非必要的新权限、用户旧数据可以平滑迁移、灰度期间没有明显崩溃、审核材料与版本行为一致。这些任一环节出问题,用户看到的都不是“更新成功”,而是“无法安装”或“打开闪退”。
7.3 误区三:本地能跑通,上架就一定会顺利
模拟器和本地真机调试无法覆盖所有发布风险。审核环境会检查隐私和权限,用户设备覆盖不同系统版本和硬件配置,灰度阶段会承受更大的真实访问压力。
上架前至少要做一轮 release 构建测试、低系统版本兼容测试、权限拒绝测试和数据迁移测试。不要用 debug 包的经验代替 release 包的行为。
7.4 误区四:小游戏和普通应用的更新机制完全相同
小游戏对包体大小、启动速度和资源加载有更苛刻的要求,很多小游戏并不把全部资源打进安装包,而是采用远端资源版本管理。普通应用的包更新通常依赖应用市场整包更新,小游戏则可能存在“应用壳不变、资源远程更新”的运行模式。两者都要发布,但更新链条和失败模式不一样。
把每次“XX更新了”看成一次版本交付,才是理解鸿蒙生态的工程视角。看到无畏契约:源能行动上架,会想到首次上架的资源与签名流程;看到小游戏更新,会想到资源版本策略;看到支付宝、鲨鱼记账更新,会想到权限和隐私合规。对这些链路理解得越深,越不会把应用市场里的更新提示当成单纯的新闻。
下一步更值得做的事,是打开 DevEco Studio 创建第一个 ArkTS 应用,将版本号从 1.0.0 调到 1.0.1,再亲手完成一次签名与上架前检查。走完这套流程,再看到鸿蒙应用更新的动态,你关注的就不是“它更新了什么功能”,而是它改了哪个模块、适配了哪种 API、经过了哪一阶段的灰度验证。