v1.0.0 登录门禁(2026-09-15 追加):按审核意见 6,应用改为必须先登录华为账号才能使用: 启动进入
pages/Index.ets的登录门禁页,service/AuthService.ets用 Account Kit 完成华为账号登录 (华为账号是实名账号,登录即完成真实身份核验),未登录不进主界面; 「我的」提供退出登录与注销账号。上线前需要在 AGC 开通「华为账号」服务、配置签名证书指纹, 必要时按module.json5里的注释补client_id。 连带影响:应用不再是"单机应用",AGC 备案信息要按实际情况填写并完成 APP 备案。
鸿蒙原生宠物健康管家。当前是可运行的 v1.0 雏形,包含宠物档案、养宠问答、食物安全速查、日程提醒 + 桌面卡片四个模块。
v1.0.1(2026-09-18)修复两条审核意见「功能异常」: ① 新建提醒保存时提示"系统提醒注册失败"——根因是日历提醒设了
snoozeTimes却没设配套的timeInterval(规格要求最少 30 秒),系统按参数错误(1700007)拒绝,旧代码把它落进了兜底文案; 现在补齐参数、注册前建通知渠道、送系统前把时间换算成将来时间、失败自动用精简参数重试, 并且先落库再注册(提醒一定进「今日待办」),页面不再弹失败弹窗,改为提示 +「去开启通知 / 重试注册」; 「我的 → 提醒与通知」可一键检查并修复。 ② 拍照识别提示"图像检测暂不可用"——端侧目标检测是否可用取决于机型与系统版本, 现在它只作为提示:照片缩放后送检、失败自动重试,选完照片直接进入"点选确认食物 → 本地知识库出结论", 任何机型都能走通。详见design/store/审核回复-2026-09-18-功能异常.md。
⚠️ v1.0.0 上架合规改造(2026-09-15):第一次提审被驳回 7 条,其中 4 条指向"应用含 AI 生成服务"。 个人开发者拿不到《安全评估报告》与生成式 AI 备案,因此本版本删除了「云端 AI」功能与网络权限, 问答改为纯本地知识库(预置文案,不接入任何生成式模型),应用成为不联网的单机应用; 同时删除了自建的隐私同意弹窗(改由平台隐私声明托管服务弹)。详情见design/store/上架进度与待办.md。
名字从「小鸿宠物」改成了「爪心」,取"爪印 + 心形掌垫",与图标一一对应(应用市场重名与商标排查见
design/app-icon/README.md)。 工程目录、包名com.pethome.xiaohong、preferences 库名pethome_store都保持不变——它们不对用户可见,改动会导致已安装的包变成另一个应用、老数据读不到。
界面截图见
design/store/shots/,图标源文件见design/app-icon/,上架素材见design/store/。
| 项目 | 版本 |
|---|---|
| DevEco Studio | 6.0.2.670 |
| HarmonyOS SDK | API 22(6.0.2.130) |
| hvigor / ohpm | 6.22.9 / 6.0.1 |
| 语言 | ArkTS + ArkUI 声明式,Stage 模型 |
| bundleName | com.pethome.xiaohong |
- DevEco Studio → Open → 选择本目录(
D:\dev\pethome)。 - 首次打开会自动 Sync(生成
oh_modules、hvigor-wrapper.js等)。 - 登录华为账号 → File → Project Structure → Signing Configs → 勾选 Automatically generate signature,SDK 选 API 22。这一步会往
build-profile.json5写入signingConfigs,没有它无法装到真机。 - 连接真机(开启开发者模式 + USB 调试),选择
entry模块点运行。
命令行构建(用于 CI 或快速验证,不做签名):
$env:NODE_HOME="C:\Program Files\Huawei\DevEco Studio\tools\node"
$env:DEVECO_SDK_HOME="C:\Program Files\Huawei\DevEco Studio\sdk"
$env:JAVA_HOME="C:\Program Files\Huawei\DevEco Studio\jbr"
$env:Path="C:\Program Files\Huawei\DevEco Studio\tools\node;C:\Program Files\Huawei\DevEco Studio\jbr\bin;"+$env:Path
Set-Location D:\dev\pethome
& "C:\Program Files\Huawei\DevEco Studio\tools\hvigor\bin\hvigorw.bat" assembleHap --mode module -p product=default -p buildMode=debug --no-daemon产物:entry/build/default/outputs/default/entry-default-unsigned.hap(约 670KB)。
entry/src/main/ets/
├── entryability/EntryAbility.ets 应用入口,初始化存储与应用级状态
├── entryformability/EntryFormAbility.ets 卡片数据提供者
├── widget/pages/WidgetCard.ets 桌面卡片 UI
├── pages/
│ ├── Index.ets 主 Tab 容器(首页/食物/问答/我的)
│ ├── PetEditPage.ets 新建 / 编辑宠物档案
│ └── ReminderEditPage.ets 新建 / 编辑提醒
├── view/
│ ├── HomeTab.ets 今日待办 + 宠物卡 + 快捷入口
│ ├── FoodTab.ets 食物安全速查 + 拍照检测
│ ├── ChatTab.ets 养宠问答(本地知识库)
│ └── PetTab.ets 档案管理 + 隐私与设置
├── service/
│ ├── AnswerService.ets 问答引擎(纯本地知识库 + 规则,不联网)
│ ├── PrivacyService.ets 平台隐私声明托管服务(撤回同意)
│ ├── ReminderService.ets 系统代理提醒
│ ├── CardService.ets 卡片快照与刷新
│ ├── PhotoService.ets 选图、复制进沙箱
│ └── VisionService.ets 系统视觉能力封装
├── data/
│ ├── PetStore.ets 本地存储(preferences + JSON)
│ ├── FoodKnowledge.ets 食物安全知识库(约 70 条)
│ └── CareKnowledge.ets 养宠科普知识库(27 个话题)
├── model/Models.ets 数据模型与免责声明
└── common/ 日期工具、应用级状态
宠物档案:PetStore 用 preferences 存 JSON,照片通过系统图片选择器(PhotoViewPicker)选取后复制进应用沙箱 files/photos/。走选择器意味着不需要申请相册权限。
养宠问答:AnswerService.ask() 是分层路由,顺序不可调换(答案全部来自本地知识库的预置文案,不联网、不调用任何模型):
- 命中急诊关键词(误食、抽搐、呼吸困难、尿闭…)→ 直接给"立即就医"话术,不进入推理;
- 命中食物词典 → 返回知识库里的确定性结论;
- 命中"需要就诊但不紧急"关键词 → 引导就医 + 给就诊准备清单;
- 命中科普话题 → 用宠物档案填充模板,回答里带上"你的猫 2岁4个月、4.2kg";
- 都不命中 → 明确告诉用户"知识库里没有",并给出可以怎么问的建议,不编造答案。
页面上会固定标注内容出处(问答页顶部说明 + 每条回答上方的"来源:食物安全知识库(预置内容)"等)。 这是审核意见 2 要求的"内容显式标识",也是本应用"不涉及 AI 生成合成内容"的证据之一。
食物安全:结论 100% 来自 FoodKnowledge,由本地规则直接给出。拍照走系统 objectDetection 端侧能力,它只能判断"画面里有没有食物",不能识别具体是哪种食物,所以拍照后由用户点选确认,再查知识库。这是刻意设计——安全类判断不能交给概率模型。
提醒 + 卡片:提醒用 reminderAgentManager 注册为系统代理提醒,App 不需要常驻后台。数据变化后 CardService.refreshCard() 主动更新所有桌面卡片实例。
- 不做诊断、不给药物剂量、不推荐药品品牌
- 急诊关键词命中后不进入任何模型推理
- 食物"能吃 / 不能吃"的结论只来自本地知识库,不由模型推断
- 每条回答下方固定展示免责声明(写在 UI 里,不藏在设置里)
- 档案、照片、对话、提醒全部存在本机
- 不申请相册权限,只读用户主动选中的照片
- 只声明"通知 / 代理提醒"一个权限,不声明网络权限,应用不具备联网能力
- 首次启动的隐私同意由华为平台隐私声明托管服务负责,应用内保留隐私政策页与撤回同意入口
- 食物识别还没有真正的食材分类模型。当前是"本机检测有没有食物 + 用户确认 + 知识库判定",按计划应在 V1.2 接入端侧小模型,实现拍照直接给出候选食材。
- 问答的知识面受限于本地知识库,27 个话题覆盖常见问题,冷门问题会如实回答"知识库里没有"。扩充话题是性价比最高的投入。 (云端 AI 兜底已在 v1.0.0 合规改造中移除,见文件开头的说明。)
- 桌面卡片的数据注入需要在真机验证(
FormBindingData→ 卡片LocalStorage)。模拟器无法完整验证提醒和卡片。 - 存储用的是 preferences + JSON,对话记录上限 200 条、识别记录 100 条。数据量上来后应换成
relationalStore。 - 应用图标已换成正式设计(爪心 · 星火),源文件和换方案脚本在
design/app-icon/; 上架前还需要再出一份 216×216 的静态图标和商店截图。 - 未做多设备(手表 / 智慧屏)与云备份。
材料与自检清单见 design/store/上架清单.md,文案见 design/store/copy.md,
隐私政策见 design/store/privacy-policy.md(需把【开发者名称】【联系邮箱】替换为真实信息)。
应用内已完成的合规项
- 首次启动隐私声明:由华为平台隐私声明托管服务统一弹出并记录同意结果,应用不再自建弹窗(审核意见 4)
- 应用内隐私政策页可随时阅读,并提供「撤回隐私同意并删除本机数据」(撤回后调用平台接口,下次启动重新弹窗)
- 应用内隐私政策页(
pages/PrivacyPage.ets),内容与上面那份 Markdown 一致 - 「我的 → 清除全部数据」一键删除本机全部数据
- 「我的 → 隐私政策 → 撤回同意并删除本机数据」撤回同意并退回同意页
仍需你侧完成的
- 软著(名称须与「爪心」一致);APP 核准(备案)按"单机 APP"勾选,无需工信部备案
- 发布证书与发布 Profile 签名(当前
signingConfigs为空,产物是 unsigned HAP) - 隐私政策页已上线(https://apollo465.github.io/pethome/,源码在
docs/),还需把该网址填进 AGC「应用信息」的隐私政策项 - 真机回归:提醒准点性(含系统通知关闭时的引导与重试)、卡片刷新(含未添加卡片时的提示)、修改档案后列表即时刷新、照片选择兼容性、深色模式下的显示
- DevEco 提示 hvigor-wrapper / Sync 失败:删掉
hvigor/hvigor-wrapper.js(当前是官方模板里的空占位文件)后重新 Sync,IDE 会重新生成。 - 命令行报
spawn java ENOENT:没有把 DevEco 自带的 JBR 加到 PATH,按上面命令行构建那段设置JAVA_HOME即可,不需要单独装 JDK。 - 命令行报
Installing pnpm... execute failed:系统 PATH 里的 Node 版本太新(本机是 v24),把 DevEco 自带的tools\node放到 PATH 最前面,并设置HVIGOR_USER_HOME到一个不含空格的路径。
当前已创建一台本地模拟器:nova 16 Pro / HarmonyOS 6.0.2(22),镜像位置 %LOCALAPPDATA%\Huawei\Sdk,实例位置 %LOCALAPPDATA%\Huawei\Emulator\deployed。
启动方式:DevEco → 设备下拉框 → Device Manager → Local Emulator → 点该设备右侧的 ▶。
设备起来之后,一条命令完成构建 + 安装 + 启动:
powershell -ExecutionPolicy Bypass -File D:\dev\pethome\scripts\run-on-emulator.ps1注意:模拟器可以直接安装未签名的 HAP,所以本机验证不需要华为账号。真机调试则必须在 DevEco 里配置自动签名(需要登录华为账号)。
main 分支带一个 GitHub Actions(checks.yml),跑 scripts/ci-check.mjs:
- 所有
.json/.json5能否解析(含module.json5、build-profile.json5) app.json5/module.json5的必填字段,以及$string:、$media:、$color:、$profile:引用能否解析main_pages.json里的页面、form_config.json里的卡片页、各 ability 的srcEntry是否都存在.ets里 200 多处$r('app.*')资源引用是否都能找到- 多语言
element/string.json的键是否与base一致 - 合规红线不回退:未声明网络权限、未残留已移除的云端 AI 字段
- 防泄漏:已提交的文件里不能有签名材料(
*.p12等)与私钥
本地同样能跑,只用 Node 内置模块,不需要装依赖:
node scripts/ci-check.mjs为什么 CI 里没有 assembleHap:HarmonyOS(非 OpenHarmony)的 SDK 与 hvigor 工具链随 DevEco Studio 分发、需要华为账号登录才能下载,GitHub 托管的 runner 上拿不到,所以公开仓库只能做静态检查。真要验证编译,得在装了 DevEco Studio 的机器上跑 scripts/build-app.ps1;工作流里留了自托管 runner 的示例注释,有构建机时可以启用。
本仓库以 MIT 协议开源,欢迎 issue / PR。开源范围与注意事项:
- 不包含发布签名材料:
signing/目录(.p12私钥、.cer、.p7b以及口令说明)已被.gitignore排除,自行出正式包请按上文重新生成自己的证书与 Profile。 - 包名与上架信息属于原作者:
bundleName为com.pethome.xiaohong,应用市场素材与应用内pages/PrivacyPage.ets里的开发者名称、联系邮箱是原作者在 AppGallery 的上架信息,二次开发请替换成自己的,否则无法上架。 - 内容仅作参考:应用内的食物安全结论与养宠科普全部是预置知识库文案(不联网、不调用模型),不构成诊断或用药建议,二次分发请保留 UI 里的免责声明。
MIT © 2026 王宇辉(Wang Yuhui)



