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

页面预览

前言

数据备份与恢复 是移动应用不可或缺的基础能力,它保障用户数据在 换机迁移应用重装系统恢复 等场景下的安全性和连续性。在 萌宠日记 中,我们通过 ExtensionAbilitybackup 类型,集成了 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 备份扩展的工作流程

有序列表 — 备份/恢复的完整生命周期:

  1. 系统触发备份:用户手动备份或系统自动备份
  2. onBackup 调用:应用准备备份数据,确保文件一致性
  3. 系统读取配置:系统根据 backup_config.json 收集文件
  4. 文件打包加密:系统将文件打包并加密存储
  5. 恢复触发:用户在新设备或重装后恢复数据
  6. 系统还原文件:系统将备份文件还原到应用沙箱
  7. 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 类型) 的配置与开发:

  1. 备份恢复架构:系统备份服务 + 备份扩展 + 备份配置的三层模型
  2. 备份扩展实现:BackupExtensionAbility 的 onBackup 和 onRestore 方法
  3. 备份配置文件:backup_config.json 的字段详解与路径规范
  4. 数据存储路径:EL 加密级别、沙箱路径说明
  5. 安全性保障:端到端加密、数据隔离
  6. 测试与调试: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
© 版权声明

相关文章