HarmonyOS应用开发实战:萌宠日记 - 备份恢复能力集成
前言数据备份与恢复是移动应用不可或缺的基础能力它保障用户数据在换机迁移、应用重装、系统恢复等场景下的安全性和连续性。在萌宠日记中我们通过ExtensionAbility的backup 类型集成了 HarmonyOS 的原生备份恢复能力让用户的宠物日记、健康记录、照片数据得到可靠保护。本文将从萌宠日记的备份恢复实现出发深入解析 ExtensionAbility 的配置、备份扩展的实现原理以及备份配置文件的设计细节。一、备份恢复体系概述1.1 备份能力架构HarmonyOS 的备份恢复体系包含三个核心角色角色组件职责系统备份服务系统级服务调度备份任务、管理备份数据备份扩展ExtensionAbilitybackup 类型提供应用的备份/恢复逻辑备份配置backup_config.json声明需要备份的文件和目录备份恢复的完整流程用户触发备份 → 系统备份服务 → 调度各应用备份扩展 ↓ 应用备份扩展 → 读取 backup_config.json → 收集指定文件 ↓ 文件打包加密 → 存储到系统备份目录1.2 萌宠日记的备份配置// module.json5 — 备份扩展声明 { extensionAbilities: [ { name: EntryBackupAbility, srcEntry: ./ets/entrybackupability/EntryBackupAbility.ets, type: backup, exported: false, metadata: [ { name: ohos.extension.backup, resource: $profile:backup_config } ] } ] }提示exported: false表示该扩展能力仅对系统服务可见外部应用无法直接调用这符合备份扩展的安全要求。二、备份扩展的实现2.1 EntryBackupAbility 源码// EntryBackupAbility.ets — 备份扩展实现 import { BackupExtensionAbility } from kit.CoreFileKit; export default class EntryBackupAbility extends BackupExtensionAbility { // 备份前的准备工作 onBackup(): void { console.log(EntryBackupAbility onBackup); } // 恢复后的处理工作 onRestore(): void { console.log(EntryBackupAbility onRestore); } }2.2 BackupExtensionAbility 生命周期BackupExtensionAbility继承自ExtensionAbility提供了两个关键的回调方法方法触发时机典型用途onBackup()系统开始备份该应用时数据一致性检查、关闭正在写入的文件onRestore()系统完成数据恢复后重建缓存、刷新 UI、重新建立网络连接2.3 备份扩展的工作流程有序列表 — 备份/恢复的完整生命周期系统触发备份用户手动备份或系统自动备份onBackup 调用应用准备备份数据确保文件一致性系统读取配置系统根据backup_config.json收集文件文件打包加密系统将文件打包并加密存储恢复触发用户在新设备或重装后恢复数据系统还原文件系统将备份文件还原到应用沙箱onRestore 调用应用处理恢复后的数据刷新 UI三、备份配置文件详解3.1 backup_config.json 结构{ allowToBackupPersistent: true, includeFiles: [ data/storage/el2/database/, data/storage/el2/base/preferences/, data/storage/el2/base/files/ ], excludeFiles: [ data/storage/el2/base/cache/ ] }3.2 配置字段说明字段类型说明萌宠日记配置allowToBackupPersistentboolean是否允许持久化备份trueincludeFilesstring[]需要备份的文件/目录路径列表数据库、首选项、文件excludeFilesstring[]排除的路径列表排除 includeFiles 中的子路径缓存目录3.3 路径配置规范备份路径使用沙箱路径遵循以下规则路径模式说明存储内容data/storage/el2/database/关系型数据库目录日记数据、宠物档案data/storage/el2/base/preferences/首选项数据目录用户设置、主题偏好data/storage/el2/base/files/应用文件目录用户创建的文件data/storage/el2/base/cache/缓存目录排除临时文件、图片缓存四、数据存储路径说明4.1 EL 等级说明HarmonyOS 沙箱路径中的el表示加密级别Encryption Level加密级别路径说明备份场景el1设备级加密设备解锁前可访问不常用el2用户级加密用户解锁后可访问萌宠日记使用el3增强加密需要用户身份验证金融级数据el4最高加密最高安全等级敏感数据4.2 萌宠日记的数据存储路径萌宠日记的数据存储在el2目录下包含以下数据数据类型存储路径备份策略关系型数据库el2/database/✅ 备份用户首选项el2/base/preferences/✅ 备份用户文件el2/base/files/✅ 备份图片缓存el2/base/cache/❌ 排除五、备份策略设计5.1 备份触发时机触发方式说明用户是否感知手动备份用户在设置中点击“备份“有感知自动备份系统在充电WiFi 环境下自动备份无感知换机迁移新设备恢复时触发有感知应用重装重装应用时恢复数据有感知5.2 备份数据的大小限制限制项限制值说明单应用备份大小无硬性限制受存储空间约束备份文件数量建议不超过 1000 个过多文件影响备份效率单文件大小建议不超过 100MB大型文件如视频需单独处理六、备份扩展的完整生命周期6.1 扩展生命周期import { BackupExtensionAbility } from kit.CoreFileKit; import { hilog } from kit.PerformanceAnalysisKit; const DOMAIN 0x0000; export default class EntryBackupAbility extends BackupExtensionAbility { // 创建时的初始化 onCreate(): void { hilog.info(DOMAIN, testTag, BackupAbility onCreate); } // 备份前准备 onBackup(): void { hilog.info(DOMAIN, testTag, BackupAbility onBackup); // 关闭所有数据库连接确保数据一致性 // 刷新 Preferences 缓存到磁盘 } // 恢复后处理 onRestore(): void { hilog.info(DOMAIN, testTag, BackupAbility onRestore); // 重建数据库连接 // 重新加载用户首选项 // 通知 UI 刷新数据 } // 销毁时的清理 onDestroy(): void { hilog.info(DOMAIN, testTag, BackupAbility onDestroy); } }6.2 生命周期与 UIAbility 的协同操作UIAbility 生命周期BackupExtensionAbility 生命周期备份开始onBackgroundonBackup备份进行中后台运行文件收集备份完成onForeground—恢复完成onForegroundonRestore七、备份数据的安全性7.1 加密机制HarmonyOS 的备份数据采用端到端加密安全层级保护措施说明传输层TLS 加密备份数据传输加密存储层AES-256 加密备份数据存储加密密钥管理硬件安全模块密钥存储在 TEE 环境中7.2 数据隔离每个应用的备份数据独立存储互不可见备份数据与运行时数据隔离存储加密密钥与应用签名绑定防止数据被其他应用解密八、备份恢复的测试方法8.1 模拟备份恢复# 使用 hdc 命令模拟备份恢复 hdc shell bm backup --bundle-name com.mengchongriji.app --backup-dir /data/backup # 触发恢复 hdc shell bm restore --bundle-name com.mengchongriji.app --backup-dir /data/backup8.2 验证备份数据# 查看备份目录 hdc shell ls -la /data/backup/com.mengchongriji.app/ # 检查备份文件完整性 hdc shell bm dump --backup --bundle-name com.mengchongriji.app九、常见问题与调试9.1 备份失败排查错误现象可能原因解决方案备份文件为空includeFiles 路径配置错误检查路径是否与实际沙箱路径一致备份恢复后数据丢失excludeFiles 排除了关键数据检查 excludeFiles 配置备份超时数据量过大考虑排除 cache 目录恢复后应用崩溃数据版本不兼容在 onRestore 中做数据迁移9.2 调试技巧// 添加详细的日志便于定位备份恢复问题 onBackup(): void { hilog.info(DOMAIN, testTag, Backup started at: %{public}s, Date.now().toString()) // 检查文件状态 // ... } onRestore(): void { hilog.info(DOMAIN, testTag, Restore completed at: %{public}s, Date.now().toString()) // 验证数据完整性 // ... }十、备份恢复最佳实践10.1 设计原则最小化备份数据只备份用户数据不备份缓存和临时文件数据一致性备份前确保数据写入完成版本兼容恢复时考虑数据格式的版本兼容性用户控制提供手动备份入口让用户掌握备份时机10.2 萌宠日记的备份策略数据类型备份策略理由日记数据全部备份用户核心数据不可丢失宠物档案全部备份用户核心数据健康记录全部备份用户核心数据提醒事项全部备份用户核心数据用户偏好全部备份恢复体验一致图片缓存不备份可重新加载节省空间临时文件不备份无保留价值总结本文从萌宠日记的备份恢复实现出发完整解析了 HarmonyOSExtensionAbilitybackup 类型的配置与开发备份恢复架构系统备份服务 备份扩展 备份配置的三层模型备份扩展实现BackupExtensionAbility 的 onBackup 和 onRestore 方法备份配置文件backup_config.json 的字段详解与路径规范数据存储路径EL 加密级别、沙箱路径说明安全性保障端到端加密、数据隔离测试与调试hdc 命令模拟备份恢复、问题排查下一篇我们将深入应用图标与启动窗口优化解析启动图标和启动窗口的配置技巧。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源应用文件备份恢复https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-file-backup-overview备份扩展开发指导https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/backup-extensionExtensionAbility 概述https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/extensionability-overview应用沙箱路径https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-sandbox数据加密级别https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/data-encryption应用数据备份恢复https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-data-migration-overview备份恢复 FAQhttps://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-file-backup-restore关系型数据库备份https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-data-persistence

相关新闻

远程系统日志服务

远程系统日志服务

一、rsyslog的作用负责按照策略采集系统中生成的日志并把日志按照规则存放到相应文件中二、存放日志类别日志文件日志种类/var/log/messages服务信息,服务启动报错/var/log/secure认证信息日志/var/log/maillog邮件日志/var/log/cron定时任务日志/var/log/boot.log系…

2026/10/11 0:25:14 阅读更多 →
手板模型供应商到底如何选不踩坑?

手板模型供应商到底如何选不踩坑?

手板模型公司怎么选?其实现在外面的手板厂大大小小数不胜数,有的甚至刚成立几个月,因此交付质量也参差不齐,最终影响是整个研发项目。这种乱象太多了,你们有感受吗?结论清单:选手板供应商&#…

2026/9/30 16:18:49 阅读更多 →
每天60秒读懂世界:2026年7月21日15条新闻

每天60秒读懂世界:2026年7月21日15条新闻

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/10/4 19:04:30 阅读更多 →

最新新闻

基于一致性算法的分布式经济调度Matlab复现与收敛性分析

基于一致性算法的分布式经济调度Matlab复现与收敛性分析

拿到这个标着“完美复现”的题目,我先说结论:这个研究方向谈不上新,但它是分布式控制与电力系统优化结合得最漂亮的一个入门案例,特别适合用来建立“分布式思维”。题目说人话就是——多台发电机组要满足一个总负荷,没…

2026/10/14 22:34:01 阅读更多 →
RT-Thread信号量本质:资源协调而非加锁

RT-Thread信号量本质:资源协调而非加锁

1. 为什么信号量不是“加锁”而是“协调”——从一个死锁现场说起刚接触 RT-Thread 时,我下意识把信号量(Semaphore)当成和互斥锁(Mutex)差不多的东西:不就是“上锁—干活—解锁”三步走?直到在…

2026/10/14 22:34:01 阅读更多 →
CoNED沿海高程数据在GEE中的淹没模拟实践与避坑指南

CoNED沿海高程数据在GEE中的淹没模拟实践与避坑指南

做沿海洪水淹没评估、海平面上升情景推演、风暴潮风险制图这类工作,第一道坎几乎都卡在高程数据上。很多新手一开始去下载普通陆地DEM,拿到沿海区域一画就露馅:陆地部分看着还行,一到滩涂、河口、潮间带,要么是空的&am…

2026/10/14 22:34:01 阅读更多 →
两台Spark实测:16GB小主机如何跑稳长上下文Agent

两台Spark实测:16GB小主机如何跑稳长上下文Agent

两台 Spark 是什么?说白了,就是我自己手头两台配置差不多的本地算力小主机,我给它们起了个代号叫 Spark,一台负责跑推理服务,一台负责干 Agent 编排和杂活。这次专门拿它们来跑本地 Agent,核心就测一件事&a…

2026/10/14 22:34:01 阅读更多 →
Certbot泛域名SSL证书自动化部署与DNS-01验证实战

Certbot泛域名SSL证书自动化部署与DNS-01验证实战

1. 为什么泛域名证书不再是“高级玩家专属”——从手动折腾到一键签发的实操跃迁你有没有过这样的经历:给公司新上线的五个子站(admin.example.com、api.example.com、docs.example.com、blog.example.com、staging.example.com)逐个申请SSL证…

2026/10/14 22:34:01 阅读更多 →
漏检后的现场重建:高可靠性系统的逆向工程能力

漏检后的现场重建:高可靠性系统的逆向工程能力

1. 项目概述:这不是故障排查,是现场重建“一次漏检之后,最难的是把现场找回来”——这句话在某高校实验室的故障复盘会上被反复提起,后来成了某跨平台系统运维组内部流传最广的一句行话。它不是形容设备坏了、日志丢了、配置错了&…

2026/10/14 22:33:00 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →