【口算王|20】HarmonyOS ArkTS AppGallery 发布复查实战:核对包名、版本、设备、素材和离线声明
证据边界:本文依据 D:/huawei/one16-11 当前可读取源码与目录产物整理;本轮未执行新构建、签名验证、真机冒烟或 AGC 后台操作。文件存在不等于包已上传、版本已绑定、已提交或审核通过。

AppGallery 发布复查不是在提交前快速扫一遍表单。一个可审核、可复现的发布版本,需要让源码配置、构建产物、AGC 后台字段、商店素材和应用真实行为保持一致。任何一层沿用旧数据,都可能出现包名与应用不符、版本选错、设备素材缺失、权限说明过度、截图与当前界面不一致等问题。
本文基于口算王项目 D:\huawei\one16-11 的真实源码,复核 AppScope/app.json5、entry/src/main/module.json5、资源文件、EntryAbility.ets、SplashPage.ets、Index.ets、HomePage.ets、MockBanks.ets、UserDataManager.ets 与 PracticePage.ets。包名 com.jiaweikang.one16 是本文草稿核验使用的唯一标记。项目目标 SDK 为 HarmonyOS 6.0.2、兼容 SDK 为 6.0.1,本文复查方法适用于 HarmonyOS 5.0 及以上 Stage 模型应用。
源码静态复核得到的身份事实是:应用名"口算王",bundleName 为 com.jiaweikang.one16,versionName 为 1.0.0,versionCode 为 10000000,目标设备为 phone、tablet、2in1,模块 requestPermissions 为空。工程目录中存在 2026 年 5 月生成的 signed APP 和 HAP,但"文件存在"不等于该包已完成真机冒烟、已绑定到某个 AGC 版本或已提交审核。本文只记录可复核事实,不虚构后台保存、审核状态或公开数据。
一、发布复查先建立唯一身份卡
每次进入 AGC 前,先把目标版本写成一张不可混用的身份卡:
应用名:口算王
Bundle Name:com.jiaweikang.one16
Version Name:1.0.0
Version Code:10000000
模块:entry
设备:phone / tablet / 2in1
包类型:HarmonyOS APP
后续包体、截图、隐私材料、内容分级和公开页都要围绕这张卡核对。若浏览器里显示了另一个应用名、包名或版本号,应立即停止操作,不能靠"页面看起来相似"继续提交。
二、AppScope 是应用级身份真源
AppScope/app.json5 中的关键字段为:
{
"bundleName": "com.jiaweikang.one16",
"versionCode": 10000000,
"versionName": "1.0.0",
"icon": "$media:app_icon",
"label": "$string:app_name"
}
这里决定应用级包名、版本、图标和名称资源。AGC 后台中的包名和版本必须与上传包解析结果一致,不能手工把另一个项目的版本号复制过来。versionCode 用于机器比较,versionName 面向用户,两者都应随正式版本策略更新。
三、显示名称要跨资源和页面一致
AppScope 的 app_name 是"口算王",entry 的 module_desc 和 EntryAbility_label 也都是"口算王"。启动页和首页标题同样展示"口算王"。
复查时至少对照四个表面:
- 安装器和桌面图标下方名称;
- 系统启动窗口;
- 应用内启动页和首页;
- AppGallery 商店名称。
任何一个表面出现旧名、内部工程名或测试名,都会让用户怀疑安装包身份,也可能触发审核材料一致性问题。
四、模块声明决定安装与设备边界
entry/src/main/module.json5 声明:
"deviceTypes": [
"phone",
"tablet",
"2in1"
],
"deliveryWithInstall": true,
"installationFree": false
这表示 entry 随安装交付,并非免安装模块。AGC 设备选择不应超出代码和素材实际覆盖范围。选择 phone、tablet、2in1 后,每类设备都要有可用布局和对应截图证据,不能只因 manifest 中列出了设备类型就认为适配完成。
五、目标 SDK 和兼容 SDK 要与发布计划一致
工程配置显示 targetSdkVersion 为 6.0.2(22),compatibleSdkVersion 为 6.0.1(21),runtimeOS 为 HarmonyOS。文章面向 HarmonyOS 5.0 及以上开发方法,但具体安装兼容边界仍以构建产物解析和 AGC 校验为准。
审核复查时不要把"文章方法适用版本""源码编译 SDK"和"商店支持设备系统版本"混成一个字段。它们相关但不等价。上传后应回读包解析结果,确认目标 API、兼容 API 和设备范围没有被旧包覆盖。
六、已有 signed APP 不代表发布完成
项目目录存在:
build/outputs/default/one16-11-default-signed.app
entry/build/default/outputs/default/entry-default-signed.hap
这些文件的时间为 2026 年 5 月。静态检查只能确认文件存在、名称和大小,不能证明:
- 签名证书仍在有效期;
- 包可以在目标设备安装;
- 核心流程没有崩溃;
- AGC 已选择这个包;
- 后台保存后仍绑定这个包;
- 包已经提交或审核通过。
正确流程是解析身份、安装冒烟、上传、在版本页选择目标包、保存并再次回读。
七、包选择必须核对三项而不是只看文件名
AGC 包列表中至少核对:
- versionName 与 versionCode;
- 上传时间与文件大小;
- bundleName 和支持设备。
如果同一版本上传过多次,文件名可能完全相同。此时只看名称容易绑定旧包。选择后离开弹窗,再回到版本页确认当前绑定项,才算完成一次可验证的保存。
八、发布前必须做安装启动卸载闭环
App Review Guideline 3.1 的核心不是"可以编译",而是安装、启动、核心功能和卸载都正常。口算王的最小冒烟链路应包含:
- 安装 signed APP;
- 启动进入
SplashPage; - 两秒后 replace 到
Index; - 切换五个主标签;
- 打开题库并完成一道题;
- 查看收藏、错题或统计;
- 退出并重新启动;
- 卸载应用。
如果当前没有连接设备或没有执行 hdc 命令,就应记录"未运行",不能把旧构建文件当成通过证据。
九、启动链路要验证定时器和失败日志
EntryAbility 加载 pages/SplashPage,Splash 使用 2 秒定时器跳转:
this.timerId = setTimeout(() => {
router.replaceUrl({ url: 'pages/Index' })
}, 2000)
页面消失时会清理 timer。发布冒烟需要验证启动页不会白屏、动画不会阻塞、首页只出现一次,系统返回也不会回到启动页。若 loadContent 失败,源码只记录日志并返回,因此真机启动日志是定位首屏问题的重要证据。
十、图标必须同时核对包内和 AGC 两个表面
包内 app_icon.png 为 1024×1024,RGBA 图像的 alpha 最小值和最大值均为 255,说明最终图片完全不透明。这符合避免透明图标背景风险的方向。
仍需目视检查:
- 浅色和深色桌面背景下是否清晰;
- 安装页和启动窗口是否使用同一设计;
- 图标缩小后核心图形是否可辨;
- 是否包含系统图标、平台标识或商标风险元素;
- AGC 应用信息页上传的图标是否与包内一致。
"像素不透明"只解决 alpha 风险,不代表视觉设计自动合格。
十一、启动窗口背景与主题策略一致
startWindowBackground 在 base 和 dark 资源中都是白色,EntryAbility 还主动设置 COLOR_MODE_LIGHT。这意味着产品当前采取固定浅色策略,而不是跟随系统深色模式。
上架材料不应宣传"完整支持深色模式"。测试应在系统深色模式下启动应用,确认白色启动窗口、状态栏内容和浅色页面不会出现白字白底、闪烁或系统自动反色。若未来改为跟随系统,必须同时更新资源、截图和说明。
十二、多设备声明必须有布局证据
Index 在常规断点使用底部导航,在其他设备形态使用侧边导航;HomePage、题库列表、挑战页和统计页还根据 breakpoint 与 pageWidth 切换布局。
发布复查应分别保存 phone、tablet、2in1 的关键截图,并检查:
- 首页、题库、挑战、收藏、我的五个入口;
- 题库详情和练习页;
- 横竖屏或窗口缩放;
- 底部手势区和状态栏安全距离;
- 长文本、弹窗和软键盘;
- 图片比例和清晰度。
若某设备没有完成验证,应从 AGC 设备范围中移除,或先补齐适配再提交。
十三、截图必须来自当前可运行版本
商店截图应展示真实或忠实的当前 UI。口算王当前首页包含绿色主题、今日练习、题型分类和推荐题库;主导航有首页、训练、挑战、收藏、我的五项。
不应使用:
- 旧版本页面;
- 设计稿中尚未实现的功能;
- 调试边框和开发日志;
- 虚构排行榜、账号或云同步;
- 含真实儿童姓名、笔记和学习记录的截图;
- 与所选设备比例不匹配的拉伸图片。
截图更新后要在 AGC 预览中回读,不能只确认上传请求成功。
十四、功能描述要与本地题库事实一致
MockBanks.ets 在本地生成加减乘除、混合运算、应用题和限时题。题库详情文案也说明题目本地生成。收藏、笔记、错题、进度、挑战历史和设置通过 Preferences 保存在本机。
因此可以准确表述:
- 题库和训练无需在线下载;
- 学习记录保存在本机;
- 当前没有登录、支付、广告、社交或云同步;
- 清理本地数据后相关记录会被删除。
这些陈述都能映射到源码。不要进一步扩展成未经验证的"绝不产生任何网络行为"。
十五、"完全离线"声明存在 TTS 回退冲突
PracticePage 创建文字转语音引擎时先使用:
online: 0
失败后又尝试:
online: 1
module.json5 没有 INTERNET 权限,源码也没有 HTTP 请求,但 online: 1 仍然是需要核实的系统服务行为。上架材料更稳妥的表达是"题库和学习数据本地运行",而不是"整个应用完全不联网"。
如果产品必须定位为纯离线应用,应移除在线回退,只保留离线 TTS 和文字降级,并重新验证设备能力。
十六、权限清单为空要和功能说明同步
当前:
"requestPermissions": []
源码没有运行时授权,也没有相机、麦克风、位置、联系人、日历或通知申请。TTS 是语音输出,不等于录音,因此不需要麦克风权限。
AGC 隐私标签、权限说明和审核备注都不应声称应用会读取这些数据。反过来,也不能把未来可能增加的通知提醒写成当前能力。SettingsPage 的"每日学习提醒"目前只保存时间,没有真正调度系统通知。
十七、隐私政策应写清本地数据边界
隐私材料至少要说明:
- 收藏、笔记、错题和进度保存于本机;
- 不要求用户注册账号;
- 当前不提供云同步;
- 用户可在设置中清理数据;
- 卸载应用后本地应用数据按系统机制处理;
- 若未来增加联网、账号或通知,将同步更新权限与政策。
笔记可能包含用户自由输入内容,截图和日志不应展示其全文。没有真实收集行为时,不要为了"政策看起来完整"而列出并不存在的数据类别。
政策中的处理目的、存储位置、保存期限和删除方式也要能由产品实际路径验证。例如"保存在本机"应能通过断网使用和重启回读证明,"可清理"应能在设置页操作后再次启动确认。若写入异常被代码吞掉,还需要补充可见失败状态,不能只依赖按钮点击完成的表象。
十八、内容分级按实际小学数学场景填写
口算王是小学数学训练工具,源码没有聊天、UGC、赌博、暴力、受控商品、支付或广告。内容分级应按真实功能回答,而不是沿用其他应用模板。
如果面向未成年人,描述中应保持教育工具定位,避免虚构社交、竞赛奖金或公开榜单。当前结果页的排名数字是静态展示,不是联网排行榜,不能作为产品能力写入商店介绍。
内容分级问卷应由实际负责人逐项确认并保存结果,不应机械复制其他教育应用答案。以后若加入广告、在线竞赛、用户投稿、账号体系或外部链接,应重新评估年龄分级、数据收集和家长知情要求,而不是继续沿用当前纯本地训练结论。
十九、分类和关键词不能过度承诺
商店分类、标签和短描述应围绕:
- 小学数学;
- 口算训练;
- 加减乘除;
- 错题巩固;
- 限时挑战;
- 本地学习记录。
不要加入"AI 自适应""云端题库""真人竞赛""家校同步"等源码中不存在的功能。审核人员进入应用后应能快速找到商店描述中的核心流程。
关键词也不能替代功能实现。即使某个热门词有更高搜索量,只要应用内没有相应入口、数据来源和用户结果,就不应使用。发布前可让测试人员逐个点击描述中的功能名,并把无法在三步内到达或无法复核的表述删掉或改得更准确。
二十、审核备注要提供最短可达路径
建议审核备注写清:
- 启动后自动进入首页;
- 点击"训练"选择题库;
- 进入章节或随机练习;
- 选择答案后查看解析;
- 收藏、错题和统计均保存在本机;
- 应用无需登录。
若语音入口只在兼容旧题型时出现,也不要把它写成首页核心能力。审核说明的目标是帮助复核实际功能,不是重复营销文案。
二十一、release 混淆关闭要作为安全复查项
entry 的 release 配置中 obfuscation enable 为 false。关闭混淆不必然导致审核失败,但正式发布前应确认这是有意决定,而不是默认模板遗留。
复查重点包括:
- 是否含调试日志和测试标记;
- 是否暴露不必要的内部实现信息;
- 依赖是否仅为本地 librarya、libraryb;
- 是否存在动态加载、隐藏入口或可疑后台行为;
- 包体是否包含无用资源和测试数据。
若启用混淆,必须重新构建并完整回归,避免路由名、反射或序列化字段受到影响。
二十二、Guideline 2.19 复查系统行为
源码没有悬浮窗、无障碍滥用、后台自启动、关联启动、推送、动态加载或控制其他应用的逻辑。EntryAbility 只初始化本地数据、断点和窗口避让监听。
这支持"未发现恶意系统行为"的静态结论,但不能替代依赖扫描和运行时验证。正式包仍需确认没有隐藏 SDK、异常网络连接或后台活动。不能只凭权限为空就断言整个包绝对安全。
运行验证应观察应用退到后台后的进程行为、系统日志和网络活动,并确认窗口避让监听在 Ability 销毁时解除。发现异常时先定位具体模块和调用链,不要用关闭系统检测、隐藏入口或区分审核环境等方式规避问题。
二十三、Guideline 3.1 复查运行稳定性
口算王发布候选包至少要覆盖:
- 首次安装和首次启动;
- Splash 到 Index;
- 主标签切换;
- 搜索初始态和无结果态;
- 非法题库参数空态;
- 正常答题和重复点击;
- 挑战交卷与结果页;
- 数据写入后重启回读;
- phone、tablet、2in1 布局;
- 正常卸载。
任何白屏、闪退、卡死、重复导航或数据重复写入都应先修复再提交。上一篇回归测试已指出结果页重复出现可能重复追加历史,这类风险应进入发布阻断清单。
二十四、保存 AGC 字段后必须回读
每次修改应用信息、图标、截图、隐私、国家地区、内容分级、包选择或审核备注后,都应:
- 点击保存;
- 等待平台明确成功状态;
- 离开当前页;
- 重新进入;
- 回读可见字段和预览;
- 记录实际时间和版本。
只看到上传进度完成,不代表字段已经绑定。自动化遇到登录、验证码、短信、扫码、安全验证、法律确认、付费确认或最终不可逆提交时必须停止,不能绕过。
二十五、国家地区和价格必须按发布计划填写
源码不能决定国家地区、价格或发布范围,这些属于运营决策。若计划仅在中国大陆发布,应选择明确地区并在保存后复核;若全球发布,还要重新检查语言、隐私、数据处理和内容分级是否适用。
没有真实决策和后台回读时,技术文章不能声称"已覆盖全球"或"已在某地区上线"。同样,付费、订阅和虚拟商品在源码中不存在,不应填写成已支持。
地区选择还会影响语言、隐私政策适用范围和素材要求,因此必须由发布计划驱动。价格若为免费,也应在后台保存后回读实际显示;任何涉及付费确认、合同或法律条款的最终动作都应交由有权限的负责人完成,自动化不得代替确认。
二十六、公开页核验是发布链路最后一步
只有平台给出真实公开 URL 后,才能记录"已发布"。公开页应回读:
- 应用名、图标和版本;
- 简介、详细描述和关键词;
- 设备截图;
- 隐私政策链接;
- 发布地区;
- 当前可下载状态。
如果只是草稿、预审或审核中,就必须使用对应状态,不得写成公开。PV、点赞、收藏和推荐位没有真实数据时留空。
二十七、建议使用结构化复查记录
每个版本可保存如下结构:
{
"bundleName": "com.jiaweikang.one16",
"versionName": "1.0.0",
"versionCode": 10000000,
"devices": ["phone", "tablet", "2in1"],
"permissions": \[\],
"packageSmoke": "not_run",
"agcPackageBound": "not_verified",
"publicUrl": ""
}
状态值必须来自实际操作。not_run、failed、passed 和 not_verified 要严格区分,空 URL 不能被替换成推测地址。
二十八、口算王当前发布事实清单
静态源码和本地文件可以确认:
- 名称为口算王;
- bundleName 为
com.jiaweikang.one16; - 版本为 1.0.0 / 10000000;
- 设备声明为 phone、tablet、2in1;
- requestPermissions 为空;
- 图标为 1024×1024 且完全不透明;
- 固定浅色模式;
- 本地题库和 Preferences 学习数据;
- 存在 signed APP/HAP 文件;
- release 混淆关闭;
- TTS 存在 online:1 回退。
当前静态复查不能确认:
- signed 包是否仍可安装和启动;
- 三类设备是否都完成真机验证;
- AGC 是否已绑定本次目标包;
- 图标和截图是否已保存;
- 隐私、分级和地区字段是否已回读;
- 是否已提交、审核或公开。
二十九、发布前最终门禁
最终门禁可归纳为六问:
- 身份是否一致:名称、包名、版本、图标?
- 能力是否一致:描述、权限、数据和实际代码?
- 设备是否一致:manifest、布局、截图和测试?
- 包体是否一致:目标包、签名、上传时间和绑定结果?
- 审核是否可达:核心流程、备注和隐私说明?
- 结果是否可回读:保存状态、审核状态和公开 URL?
任意一问没有证据,就保留为待验证,不要用经验补全。
三十、结语
AppGallery 发布复查的本质是建立一条证据链:从 AppScope 和 module.json5 锁定身份与设备,从源码核对功能、权限和数据,从构建产物验证安装运行,再到 AGC 保存回读和公开页确认。每一层都只能证明自己的范围。
对口算王而言,最重要的边界是准确描述"题库和学习数据本地化",同时正视 TTS 在线回退、固定浅色模式、三设备素材、混淆关闭和旧构建产物的验证状态。只有在真实操作完成后,才能把对应字段从"待验证"更新为"通过"或"已发布"。
本文部分内容由 AI 辅助整理,所有源码事实、发布状态和审核边界均以口算王项目实际代码、构建产物与平台可回读结果为准。


三十、复查记录必须区分证据级别
发布记录中应把"源码已核对""产物文件存在""本地构建通过""真机冒烟通过""包已上传""版本已绑定""已提交审核"和"审核通过"写成互不替代的状态。只有看到对应页面或命令的新鲜证据,才能更新该项。旧截图、历史包文件或脚本退出码不能自动证明当前版本已经进入下一阶段。
对本项目而言,本轮静态复核能确认包名、版本、目标设备与权限声明,也能确认目录中存在历史签名产物;但没有执行新的构建、安装、启动、核心流程和卸载测试,也没有进入 AGC 核对版本绑定。因此文章只能提供复查方法和源码快照,不能声明包已上传、已提交或已通过审核。
三十一、离线声明要以真实行为为准
模块权限为空只是一个重要信号,还需要继续检查代码和依赖是否包含网络请求、Web 组件、账号、分析、广告、推送或在线 SDK。只有实际行为不依赖服务器,商店文案、隐私政策和 AGC 应用类型才能一致写为本地或离线。未来一旦加入联网能力,必须同步重审权限、隐私标签、政策文本和上架描述。
提交前最后一次回读应重新核对目标应用、包名、版本号、包上传时间、设备素材组、国家地区、内容分级和隐私字段。任一身份不一致都停止,不在相似页面上继续操作。本文本轮未执行 AGC 后台操作,这些步骤属于发布检查清单,不代表已经完成外部提交。
AI 辅助声明
本文在人工复核口算王 HarmonyOS 配置、源码和目录产物后,使用 AI 辅助整理结构、润色表达并生成配图;未执行的构建、真机、上传、版本绑定、提交与审核状态均未写成已完成。