HarmonyOS应用开发实战:萌宠日记 – 备份恢复能力集成

前言
数据备份与恢复 是移动应用不可或缺的基础能力,它保障用户数据在 换机迁移、应用重装、系统恢复 等场景下的安全性和连续性。在 萌宠日记 中,我们通过 ExtensionAbility 的 backup 类型,集成了 HarmonyOS 的原生备份恢复能力,让用户的宠物日记、健康记录、照片数据得到可靠保护。
本文将从 萌宠日记 的备份恢复实现出发,深入解析 ExtensionAbility 的配置、备份扩展的实现原理,以及备份配置文件的设计细节。
一、备份恢复体系概述
1.1 备份能力架构
HarmonyOS 的备份恢复体系包含三个核心角色:
| 角色 | 组件 | 职责 |
|---|---|---|
| 系统备份服务 | 系统级服务 | 调度备份任务、管理备份数据 |
| 备份扩展 | ExtensionAbility(backup 类型) | 提供应用的备份/恢复逻辑 |
| 备份配置 | 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 配置字段说明
| 字段 | 类型 | 说明 | 萌宠日记配置 |
|---|---|---|---|
allowToBackupPersistent |
boolean | 是否允许持久化备份 | true |
includeFiles |
string[] | 需要备份的文件/目录路径列表 | 数据库、首选项、文件 |
excludeFiles |
string[] | 排除的路径列表(排除 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 生命周期 |
|---|---|---|
| 备份开始 | onBackground | onBackup |
| 备份进行中 | 后台运行 | 文件收集 |
| 备份完成 | onForeground | — |
| 恢复完成 | onForeground | onRestore |
七、备份数据的安全性
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/backup
8.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 萌宠日记的备份策略
| 数据类型 | 备份策略 | 理由 |
|---|---|---|
| 日记数据 | 全部备份 | 用户核心数据,不可丢失 |
| 宠物档案 | 全部备份 | 用户核心数据 |
| 健康记录 | 全部备份 | 用户核心数据 |
| 提醒事项 | 全部备份 | 用户核心数据 |
| 用户偏好 | 全部备份 | 恢复体验一致 |
| 图片缓存 | 不备份 | 可重新加载,节省空间 |
| 临时文件 | 不备份 | 无保留价值 |
总结
本文从 萌宠日记 的备份恢复实现出发,完整解析了 HarmonyOS ExtensionAbility(backup 类型) 的配置与开发:
- 备份恢复架构:系统备份服务 + 备份扩展 + 备份配置的三层模型
- 备份扩展实现: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-extension
- ExtensionAbility 概述: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
- 备份恢复 FAQ:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-file-backup-restore
- 关系型数据库备份:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-data-persistence
© 版权声明
文章版权归作者所有,未经允许请勿转载。