目录
- 前言
- 应用数据备份恢复简介
- 关于应用接入数据备份恢复
- 应用接入数据备份恢复约束与限制
- 实现数据备份和恢复
- includes支持的路径清单
结束语
前言
在移动应用开发中,数据备份与恢复功能对于保护用户数据至关重要,尤其是现在大家对数据越来越重视,数据备份和恢复是非常关键的技术需求。而HarmonyOS提供了一套完整的数据备份与恢复框架,允许应用轻松实现数据的备份与恢复,这也是在鸿蒙原生开发中比较常用且重要的技术点。那么本文就来详细介绍如何在HarmonyOS应用中接入数据备份与恢复功能,包括技术选型、实现步骤和代码示例,方便查阅使用。
应用数据备份恢复简介
数据备份与恢复功能确保用户在更换设备或数据丢失时能够恢复其重要数据,尤其是用户在使用应用的过程中,会产生对应的应用数据,比如配置信息、业务数据等。为了保证用户数据不会因为应用升级、迁移等操作而丢失,应用需要接入数据备份恢复。HarmonyOS的数据备份恢复框架提供了以下核心能力:
- 自动备份:定期自动备份应用数据到云端。
- 手动备份:允许用户手动触发数据备份。
- 数据恢复:在需要时从云端恢复数据到设备。
在开发前,需要先了解ExtensionAbility组件,建议参考ExtensionAbility组件概述:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...。
其中,BackupExtensionAbility是Stage模型中扩展组件ExtensionAbility的派生类,用于提供备份及恢复应用数据的能力,它是一种无界面的扩展组件,随着备份恢复任务的启动而运行,随着备份恢复任务的结束而退出。
在实际开发中不同应用所需实现的场景不同,主要可以分为下面两种情况: - 应用接入数据备份恢复:应用均可以接入数据备份恢复,在接入后,应用可通过修改配置文件定制备份恢复框架的行为,包括是否允许备份恢复、备份哪些数据。而且应用本身无法触发数据的备份和恢复,仅能进行备份恢复的配置。
应用触发数据备份恢复(仅对系统应用开放)。
关于应用接入数据备份恢复
在HarmonyOS中,数据备份与恢复通常涉及以下步骤:
1.配置备份策略:定义哪些数据需要备份以及备份的频率。
2.实现备份逻辑:编写代码将数据备份到云端。
3.实现恢复逻辑:编写代码从云端恢复数据。
4.用户界面:提供用户界面供用户触发备份与恢复操作。
应用接入数据备份恢复需要通过BackupExtensionAbility实现,尤其是BackupExtensionAbility,是Stage模型中扩展组件ExtensionAbility的派生类。开发者可以通过修改配置文件定制备份恢复框架的行为,包括是否允许备份恢复,备份哪些文件等。应用接入数据备份恢复约束与限制
再来介绍一下应用接入数据备份恢复约束与限制,具体如下所示:
- 当备份恢复时,所有待备份文件及目录的路径不得超过4095字节,否则将导致未定义行为。
- 当备份目录时,应用进程必须拥有读取该目录及其所有子目录的权限(DAC中的r),否则将导致备份失败。
- 当备份文件时,应用进程必须拥有搜索该文件所有祖父级目录的权限(DAC中的x),否则将导致备份失败。
当备份恢复时,所有待备份恢复的文件及目录不支持相对路径(../)和软链接。
实现数据备份和恢复
步骤1:配置文件
首先,在应用配置文件module.json5中注册extensionAbilities相关配置,新增"extensionAbilities"字段,其中注册类型"type"设置为"backup",元数据信息"metadata"新增一个"name"为"ohos. extension. backup"的条目。这里的BackupExtensionAbility配置文件设置如下所示:
{
"extensionAbilities": [
{
"description": "$string:ServiceExtAbility",
"icon": "$media:icon",
"name": "BackupExtensionAbility",
"type": "backup",
"exported": false,
"metadata": [
{
"name": "ohos.extension.backup",
"resource": "$profile:backup_config"
}
],
// 在BackupExtension.ets文件里自定义继承BackupExtensionAbility,重写其中的onBackup/onBackupEx和onRestore/onRestoreEx方法,推荐使用onBackupEx/onRestoreEx。如果没有特殊要求可以空实现,则备份恢复服务会按照统一的备份恢复数据规则进行备份恢复。
"srcEntry": "./ets/BackupExtension/BackupExtension.ets",
}
]
}
步骤2:元数据资源配置文件
然后新增元数据资源配置文件,在元数据资源配置文件中,定义备份恢复时需要传输的文件。元数据资源配置文件名称需要与module.json5中"metadata.resource"例如"backup_config.json"名称保持一致,其保存位置在工程的resources/base/profile文件夹下。具体的元数据资源配置文件操作示例如下所示:
{
"allowToBackupRestore": true,
"includes": [
"/data/storage/el2/base/files/users/"
],
"excludes": [
"/data/storage/el2/base/files/users/hidden/"
],
"fullBackupOnly": false,
"restoreDeps": ""
}
步骤3:备份恢复操作
开发使用者可以在BackupExtension.ets文件中自定义类继承的BackupExtensionAbility,通过重写其onBackup/onBackupEx和onRestore/onRestoreEx方法,使其达到在备份预加工应用数据或者在恢复阶段加工待恢复文件。如果没有特殊要求可以空实现,则备份恢复服务会按照统一的备份恢复数据规则进行备份恢复。那么下面就来展示一个空实现的BackupExtension.ets文件的具体设置:
1、onBackup && onRestore
//onBackup && onRestore
import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit';
import {hilog} from '@kit.PerformanceAnalysisKit';
const TAG = `FileBackupExtensionAbility`;
export default class BackupExtension extends BackupExtensionAbility {
//onBackup
async onBackup () {
}
//onRestore
async onRestore (bundleVersion : BundleVersion) {
}
}
2、onBackupEx && onRestoreEx
//onBackupEx && onRestoreEx
import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit';
interface ErrorInfo {
type: string,
errorCode: number,
errorInfo: string
}
class BackupExt extends BackupExtensionAbility {
//onBackupEx
async onBackupEx(backupInfo: string): Promise<string> {
console.log(`onBackupEx ok`);
let errorInfo: ErrorInfo = {
type: "ErrorInfo",
errorCode: 0,
errorInfo: "app diy error info"
}
return JSON.stringify(errorInfo);
}
// onRestoreEx
async onRestoreEx(bundleVersion : BundleVersion, restoreInfo: string): Promise<string> {
let errorInfo: ErrorInfo = {
type: "ErrorInfo",
errorCode: 0,
errorInfo: "app diy error info"
}
return JSON.stringify(errorInfo);
}
}
includes支持的路径清单
最后再来分享一下includes支持的路径清单列表,可以看到支持的还是蛮多的,具体如下所示:
{
"includes": [
"data/storage/el1/database/",
"data/storage/el1/base/files/",
"data/storage/el1/base/preferences/",
"data/storage/el1/base/haps/*/files/",
"data/storage/el1/base/haps/*/preferences/",
"data/storage/el2/database/",
"data/storage/el2/base/files/",
"data/storage/el2/base/preferences/",
"data/storage/el2/base/haps/*/files/",
"data/storage/el2/base/haps/*/preferences/",
"data/storage/el2/distributedfiles/",
"data/storage/el5/database/",
"data/storage/el5/base/files/",
"data/storage/el5/base/preferences/",
"data/storage/el5/base/haps/*/files/",
"data/storage/el5/base/haps/*/preferences/"
]
}
结束语
通过上文对应用接入数据备份和恢复的详细介绍,大家应该都了解了如何在HarmonyOS应用中实现数据备份与恢复功能,想必后面的鸿蒙原生应用开发中也会越来越多的去应用这些功能能力。通过上面的介绍,也可以看出数据备份与恢复是HarmonyOS开发中的重要功能,它为应用提供了数据保护的能力。随着技术的不断发展,数据备份与恢复功能将在HarmonyOS生态中扮演越来越重要的角色,为用户带来更加安全和便捷的体验,尤其是给应用的数据做了后盾和保障,数据从此变得更加安全。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。