HarmonyOS AppGallery Connect 上架前自查漏项怎么办:中式美食 release 包、隐私入口和权限说明怎么对齐

做 HarmonyOS 应用时,页面能跑起来只是第一步。真正临近上架时,容易暴露出来的是另外一类问题:release 包和调试包不一致,隐私政策入口在代码里有但真机点不开,权限说明写得太泛,返回路径在某些页面上会断。中式美食这类内容型应用看起来不复杂,但只要涉及首页、详情、收藏、设置、反馈和协议页面,上架前就不能只看主流程。
我现在会把上架前自查拆成四块:构建包、合规入口、真机路径、证据记录。这样做不是为了把流程写复杂,而是为了避免最后一天才发现问题,只能一边改代码一边补截图。
| 检查块 | 我主要看什么 | 为什么重要 |
|---|---|---|
| release 包 | 是否能稳定构建、版本号是否正确 | 提交包不是调试包,不能只靠本地运行判断 |
| 隐私入口 | 用户协议、隐私政策能否从应用内打开 | 审核会按用户路径点,不只看代码里有没有 |
| 权限说明 | 申请权限是否和当前功能一致 | 权限多写、乱写都会增加返工概率 |
| 真机路径 | 首页、详情、设置、反馈、返回是否走通 | 模拟器正常不代表真机路径稳定 |
我不会只用 DevEco Studio 的运行按钮判断应用状态。发布前要单独跑 release 构建,并把构建日志和产物路径留下来。
$DevEcoHome = '<DevEco Studio 安装目录>'
$hvigor = Join-Path $DevEcoHome 'tools\hvigor\bin\hvigorw.bat'
$env:DEVECO_SDK_HOME = Join-Path $DevEcoHome 'sdk'
$env:JAVA_HOME = Join-Path $DevEcoHome 'jbr'
$env:PATH = "$env:JAVA_HOME\bin;$env:PATH"
& cmd /c "`"$hvigor`" --no-daemon assembleHap --mode module -p product=default -p buildMode=release 2>&1" |
Tee-Object -FilePath .\release-check\build-release.log
这里我主要看三件事:是不是 release 构建,版本号有没有跟本次提交一致,日志里有没有资源缺失、签名、权限或 profile 相关异常。调试包跑通不能替代这一步。
权限不是越少写越好,也不是提前把未来可能用到的都写进去。更稳的做法是:当前功能确实用到了什么,就声明什么;没有入口、没有功能闭环的权限,先不要写。
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.INTERNET",
"reason": "$string:permission_internet_reason",
"usedScene": {
"abilities": ["EntryAbility"],
"when": "inuse"
}
}
]
}
}
| 权限 | 当前是否使用 | 自查方式 |
|---|---|---|
| INTERNET | 如果有在线内容、反馈或帮助页,就需要说明 | 从页面入口触发一次真实网络能力 |
| CAMERA | 没有拍照能力就不要声明 | 检查 module.json5 和实际页面 |
| LOCATION | 没有定位功能就不要声明 | 检查权限弹窗是否会误触发 |
| 通知/提醒 | 只有提醒功能上线后再声明 | 检查是否有用户可控开关 |
我以前容易犯的错,是只确认项目里存在隐私政策页面,却没有从真机首页一路点进去。审核看的是用户能不能找到、能不能打开、内容是否对应当前功能。
interface LegalItem {
title: string
route: string
}
const LEGAL_ITEMS: LegalItem[] = [
{ title: '用户协议', route: 'pages/legal/UserAgreementPage' },
{ title: '隐私政策', route: 'pages/legal/PrivacyPolicyPage' },
]
设置页里不要只放一个很小的文字链接。至少要让用户能明确看到“用户协议”“隐私政策”“反馈与帮助”这些入口,并且返回路径要正常。
| 真机操作 | 预期结果 |
|---|---|
| 首页进入设置页 | 设置页正常打开,不丢失返回栈 |
| 设置页点隐私政策 | 内容能打开,标题和正文匹配 |
| 隐私页返回设置页 | 返回后设置页状态不乱 |
| 设置页点反馈入口 | 反馈入口可用,不出现空白页 |
| 多次返回首页 | NavPathStack 或路由栈不残留错误页面 |
上架前自查不是做完就算。最好把证据留下来:构建日志、版本截图、隐私入口截图、权限说明截图、真机主路径截图。原因很简单,后面如果审核反馈某个点异常,自己能快速对比:是提交前就有问题,还是提交包和本地包不一致。
release-check/
build-release.log
version-info.txt
screenshots/
01-home.png
02-settings.png
03-privacy.png
04-feedback.png
这套目录不需要复杂,但要能复现。个人开发者最怕的是“我记得我测过”,但过两天完全找不到当时测的包、测的设备和测的截图。
| 顺序 | 动作 |
|---|---|
| 1 | 先构建 release 包,不用调试包冒充发布包 |
| 2 | 真机安装后从首页走主流程 |
| 3 | 检查设置、协议、隐私、反馈这些审核会点的入口 |
| 4 | 对照 module.json5 看权限是否合理 |
| 5 | 截图和日志归档,发现问题再改下一轮 |
这篇的重点不是把 AppGallery Connect 每一个表单都讲完,而是把个人开发者最容易忽略的“提交前自查”讲清楚。只要 release 包、权限说明、隐私入口和真机路径先稳住,后面再补截图、描述、分类和版本说明时,返工概率会低很多。
鸿蒙生态里的经验文章,如果只写“我做了一个页面”,对后来的人帮助不大。更有价值的是把一个真实应用从开发走向提交时遇到的边界写清楚。中式美食这个案例不复杂,但它覆盖了个人 HarmonyOS 应用常见的几类问题:ArkUI 页面、Stage 路由、release 构建、权限说明、隐私入口和真机主路径。这些内容不是某一个项目独有,换成工具类、内容类、学习类应用也能参考。
| 可复用点 | 对其他 HarmonyOS 应用的价值 |
|---|---|
| release 包自查 | 避免只用调试包判断发布状态 |
| 隐私入口路径 | 帮助开发者提前补齐审核会点的入口 |
| 权限说明对照 | 减少“权限和功能不一致”的返工 |
| 真机路径截图 | 给后续审核反馈和版本回溯留证据 |
我更愿意把这类文章写成“我怎么排查、为什么这么做、做完以后怎么验证”,而不是把官方文档重新抄一遍。官方文档告诉我们规则,项目实践负责把规则落到一个真实页面、真实包、真实设备上。
| 结果文件 | 作用 |
|---|---|
build-release.log |
证明 release 构建流程可复现 |
version-info.txt |
记录 versionCode、versionName 和提交批次 |
privacy-path.png |
证明隐私入口可以从真机路径打开 |
permission-check.md |
记录每个权限为什么存在 |
route-check.md |
记录首页、详情、设置、协议、反馈的返回路径 |
这些文件不一定都要放进公开文章,但本地一定要有。因为审核返工时,最怕不知道“当时测的是哪一个包”。有了这些证据,才能快速判断是代码问题、构建问题、配置问题,还是提交材料没对齐。
| 发现的问题 | 处理方式 |
|---|---|
| release 构建失败 | 先修构建,不继续补截图和描述 |
| 隐私入口打不开 | 先修路由和页面注册,再重新走真机路径 |
| 权限说明太泛 | 回到具体功能入口重写 reason |
| 返回路径异常 | 先检查 NavPathStack 或路由栈,再补页面状态恢复 |
| 截图和当前版本不一致 | 重新安装 release 包后再截图 |
这个顺序很重要。不要在构建包都不稳定时去补材料,也不要在隐私入口打不开时去写一大段解释。上架前自查要解决的是实际可用性,不是把问题包装得好看。
如果后面中式美食继续加更多能力,比如 AI 菜谱推荐、图片识别食材、购物清单提醒或者多设备同步,上架前自查还要继续扩展。新增能力越多,权限、隐私说明、用户入口和真机路径越要同步更新。否则功能本身做出来了,发布时还是会因为材料和入口不一致返工。
所以这套检查不是一次性的。每次版本增加新能力,都要问四个问题:包能不能稳定产出,用户能不能找到入口,权限能不能解释清楚,真机路径能不能走完。能回答清楚,再进入提交流程。
我会把真机检查拆成“冷启动、连续返回、异常入口、二次进入”四轮。冷启动看首页和资源是否正常;连续返回看路由栈有没有残留;异常入口看网络失败、空数据、无权限时页面有没有兜底;二次进入看应用从后台回来以后状态是否还稳定。
| 检查轮次 | 具体动作 | 通过标准 |
|---|---|---|
| 冷启动 | 安装 release 包后第一次打开 | 首页资源、底部导航、默认数据正常 |
| 连续返回 | 首页进详情、详情进设置、再逐级返回 | 不黑屏、不回错页、不丢导航状态 |
| 异常入口 | 断网后点反馈、帮助、在线内容 | 有提示,不出现空白页 |
| 二次进入 | 退到后台再打开 | 搜索词、收藏状态、最近浏览不乱跳 |
这一步其实很朴素,但能抓到很多“开发时没感觉、审核时很明显”的问题。特别是个人项目,很多页面是边做边补,路由和状态很容易留下旧写法。上架前多走几轮,比提交后等审核反馈再改更省时间。
我会在本地留一份很短的版本记录,不需要写成长文档,但要能回答三个问题:这次提交的包是哪一个,改了哪些和审核相关的点,真机检查用的是什么设备。
versionName: 1.0.3
versionCode: 103
device: HUAWEI nova 14 Pro
system: HarmonyOS 6.1
check:
- release build passed
- privacy path passed
- permission reason checked
- main route return passed
以后如果有人问“为什么这个版本能提交”,这份记录就能直接说明,不需要靠记忆回想。
上架前我会单独把 module.json5 拿出来看一遍。不是为了改成多漂亮,而是确认发布包里声明的东西和真实应用能力一致。中式美食当前更像内容浏览和本地记录应用,如果没有拍照、定位、录音,就不要提前声明这些敏感权限。
{
"module": {
"name": "entry",
"type": "entry",
"mainElement": "EntryAbility",
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"exported": true
}
],
"requestPermissions": [
{
"name": "ohos.permission.INTERNET",
"reason": "$string:permission_internet_reason",
"usedScene": {
"abilities": ["EntryAbility"],
"when": "inuse"
}
}
]
}
}
这段配置我会对照三件事:EntryAbility 是否真的是发布入口,权限 reason 是否写进资源文件,页面里是否真的有使用该能力的入口。如果只是未来可能会用,就不放进当前版本。
设置页里如果到处手写跳转路径,后面改页面名时很容易漏。我的做法是把协议入口收在一个配置里,设置页只负责渲染和跳转。
type LegalRoute = {
title: string
routeName: string
description: string
}
const LEGAL_ROUTES: LegalRoute[] = [
{
title: '用户协议',
routeName: 'UserAgreementPage',
description: '说明账号、内容使用和基础服务规则'
},
{
title: '隐私政策',
routeName: 'PrivacyPolicyPage',
description: '说明数据收集、使用、存储和撤回方式'
}
]
function openLegalPage(route: LegalRoute) {
this.pathStack.pushPathByName(route.routeName, null)
}
这样做的好处是:审核前只要检查这份配置,就能知道公开协议入口有没有漏;真机上点不开时,也能快速定位是路由名错、页面没注册,还是设置页没有渲染入口。
上架审核不会只停在首页。设置页、协议页、反馈页、详情页都会被点到。中式美食里我会把返回路径按页面链路记录下来,尤其是 NavPathStack 相关页面。
const releaseRouteCases = [
['HomePage', 'RecipeDetailPage', 'HomePage'],
['HomePage', 'SettingsPage', 'PrivacyPolicyPage', 'SettingsPage', 'HomePage'],
['HomePage', 'SettingsPage', 'FeedbackPage', 'SettingsPage', 'HomePage'],
['HomePage', 'SearchPage', 'RecipeDetailPage', 'SearchPage', 'HomePage']
]
这不是自动化测试的完整替代,但它能提醒我:发布前要按这些路径真机点一遍。尤其是搜索页和详情页,最容易出现返回后列表状态丢失、关键词还在但结果被默认列表覆盖的问题。
| 路径 | 容易暴露的问题 | 修正方向 |
|---|---|---|
| 首页 -> 详情 -> 首页 | 返回后滚动位置丢失 | 保存列表现场和滚动位置 |
| 首页 -> 设置 -> 隐私 -> 设置 | 协议页返回栈异常 | 检查 routeName 和 NavPathStack |
| 首页 -> 搜索 -> 详情 -> 搜索 | 搜索结果被默认列表覆盖 | 保留 committedKeyword 和结果态 |
| 首页 -> 设置 -> 反馈 | 反馈入口空白 | 检查网络兜底和页面注册 |
我会把每次自查结论写成一份很短的 Markdown,不需要复杂格式,但要能看出检查日期、设备、系统版本、包版本和发现的问题。
# release 自查记录
- 日期:2026-07-17
- 设备:HUAWEI nova 14 Pro
- 系统:HarmonyOS 6.1
- versionName:1.0.3
- versionCode:103
## 结论
- release 构建:通过
- 隐私入口:通过
- 权限说明:通过
- 主路径返回:通过
## 遗留问题
- 搜索页空结果文案还可以再自然一点
- 设置页反馈入口需要补一张正式截图
这份记录以后也能反过来服务文章:不是凭空写经验,而是把真实检查过程、真实问题和真实修正沉淀出来。
更多推荐



所有评论(0)