应用数据备份规复概述
用户在利用应用的过程中,会产生对应的应用数据,如配置信息、业务数据等。为了保证用户数据不会因为应用升级、迁移等操纵而丢失,应用需要接入数据备份规复。
在开发前,需要先了解ExtensionAbility组件,建议参考ExtensionAbility组件概述。
BackupExtensionAbility是Stage模子中扩展组件ExtensionAbility的派生类,用于提供备份及规复应用数据的本领。它是一种无界面的扩展组件,随着备份规复任务的启动而运行,随着备份规复任务的竣事而退出。
差别应用所需实现的场景差别,分为:
- 应用接入数据备份规复:应用均可以接入数据备份规复,在接入后,应用可通过修改配置文件定制备份规复框架的行为,包括是否答应备份规复、备份哪些数据。
应用自己无法触发数据的备份和规复,仅能进行备份规复的配置。
应用触发数据备份规复(仅对体系应用开放)
应用接入数据备份规复
应用接入数据备份规复需要通过BackupExtensionAbility实现。
BackupExtensionAbility,是Stage模子中扩展组件ExtensionAbility的派生类。开发者可以通过修改配置文件定制备份规复框架的行为,包括是否答应备份规复,备份哪些文件等。
接口阐明
备份规复扩展本领API的接口利用指导请参见BackupExtensionAbility API参考和BackupExtensionContext API参考。
束缚与限定
- 当备份规复时,所有待备份文件及目次的路径不得超过4095字节,否则将导致未定义行为。
- 当备份目次时,应用历程必须拥有读取该目次及其所有子目次的权限(DAC中的r),否则将导致备份失败。
- 当备份文件时,应用历程必须拥有搜索该文件所有祖父级目次的权限(DAC中的x),否则将导致备份失败。
- 当启动模式标签"launchType"为"singleton"时不支持备份规复。
开发步调
- [/code] 开发者可根据自身的业务场景,选择对应的规复数据方式。以临时路径 [b]/data/storage/el2/base/.backup/restore/[/b] 为例:
- 假设应用的数据备份路径为:[b]data/storage/el2/base/files/A/[/b] 。那么在规复时,如果配置了fullBackupOnly为false,数据会被解压到:[b]/data/storage/el2/base/files/A/ [b]目次下,如果配置了fullBackupOnly为true,数据会被解压到:[/b]/data/storage/el2/base/.backup/restore/data/storage/el2/base/files/A/[/b] 目次下。
- [b]includes默认值:[/b]
-
- [list=1]
- [*] 在应用配置文件module.json5中注册extensionAbilities相关配置
- 新增"extensionAbilities"字段,此中注册类型"type"设置为"backup",元数据信息"metadata"新增一个"name"为"ohos. extension. backup"的条目。
- BackupExtensionAbility配置文件示例:
-
- [code]{
- "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",
- }
- ]
- }
复制代码 新增元数据资源配置文件
在元数据资源配置文件中,定义备份规复时需要传输的文件。元数据资源配置文件名称需要与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": "",
- }
复制代码 开发者可以在BackupExtension.ets文件中自定义类继承的BackupExtensionAbility,通过重写其onBackup/onBackupEx和onRestore/onRestoreEx方法,使其到达在备份预加工应用数据大概在规复阶段加工待规复文件。
如果没有特殊要求可以空实现,则备份规复服务会按照同一的备份规复数据规则进行备份规复。
下面的示例展示了一个空实现的BackupExtension.ets文件。
- //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 () {
- hilog.info(0x0000, TAG, `onBackup ok`);
- }
- //onRestore
- async onRestore (bundleVersion : BundleVersion) {
- hilog.info(0x0000, TAG, `onRestore ok ${JSON.stringify(bundleVersion)}`);
- hilog.info(0x0000, TAG, `onRestore end`);
- }
- }
复制代码- //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> {
- console.log(`onRestoreEx ok ${JSON.stringify(bundleVersion)}`);
- let errorInfo: ErrorInfo = {
- type: "ErrorInfo",
- errorCode: 0,
- errorInfo: "app diy error info"
- }
- return JSON.stringify(errorInfo);
- }
- }
复制代码 元数据资源配置文件阐明
属性名称数据类型必填含义allowToBackupRestore布尔值是是否答应备份规复,默以为false。includes字符串数组否 应用沙箱中需要备份的文件和目次。
当模式串以非/开始时,表示一个相对于根路径的相对路径。
当includes已配置时,备份规复框架会接纳开发者配置的模式串,否则将会接纳下述代码段内容作为默认值。
excludes字符串数组否 includes中无需备份的例外项。格式同includes。
当excludes已配置时,备份规复框架会接纳开发者配置的模式串,否则将会接纳空数组作为默认值。
fullBackupOnly布尔值否是否利用应用默认规复目次,默认值为false。当值为true时,规复数据时会通过临时路径进行缓存,临时路径可通过backupDir获取。当值为false大概不配置该字段时,规复数据会以'/'为根目次解压数据。restoreDeps字符串否不保举利用,应用规复时依赖其他应用数据,默认值为"",需要配置依赖应用名称。当前仅支持最多一个依赖项。配置的依赖仅在一次规复任务上下文生效,如果一次规复任务中没有检测到依赖应用,则忽略该依赖描述继续实行规复任务。依赖应用未规复大概规复失败都会导致本应用规复失败。extraInfojson串否额外信息可通过该字段传递。阐明
1、有关fullBackupOnly字段的阐明
当fullBackupOnly为false时,规复数据会以 / 为根目次解压数据,同路径下的同名文件会被覆盖。
当fullBackupOnly为true时,规复数据会以临时目次为根目次解压数据,开发者需要在OnRestore/OnRestoreEx内自行实现规复数据的逻辑,进行最终的规复。
开发者可根据自身的业务场景,选择对应的规复数据方式。以临时路径 /data/storage/el2/base/.backup/restore/ 为例:
假设应用的数据备份路径为:data/storage/el2/base/files/A/ 。那么在规复时,如果配置了fullBackupOnly为false,数据会被解压到:/data/storage/el2/base/files/A/ 目次下,如果配置了fullBackupOnly为true,数据会被解压到:/data/storage/el2/base/.backup/restore/data/storage/el2/base/files/A/ 目次下。
includes默认值:
- {
- "includes": [
- "data/storage/el1/database/",
- "data/storage/el1/base/files/",
- "data/storage/el1/base/preferences/",
- "data/storage/el1/base/haps/<module-name>/files/",
- "data/storage/el1/base/haps/<module-name>/preferences/",
- "data/storage/el2/database/",
- "data/storage/el2/base/files/",
- "data/storage/el2/base/preferences/",
- "data/storage/el2/base/haps/<module-name>/files/",
- "data/storage/el2/base/haps/<module-name>/preferences/",
- "data/storage/el2/distributedfiles/"
- ]
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |