HarmonyOS NEXT - 应用数据备份规复

诗林  金牌会员 | 2024-10-23 13:06:38 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 517|帖子 517|积分 1551

应用数据备份规复概述

 


用户在利用应用的过程中,会产生对应的应用数据,如配置信息、业务数据等。为了保证用户数据不会因为应用升级、迁移等操纵而丢失,应用需要接入数据备份规复。
在开发前,需要先了解ExtensionAbility组件,建议参考ExtensionAbility组件概述。
BackupExtensionAbility是Stage模子中扩展组件ExtensionAbility的派生类,用于提供备份及规复应用数据的本领。它是一种无界面的扩展组件,随着备份规复任务的启动而运行,随着备份规复任务的竣事而退出。
差别应用所需实现的场景差别,分为:


  • 应用接入数据备份规复:应用均可以接入数据备份规复,在接入后,应用可通过修改配置文件定制备份规复框架的行为,包括是否答应备份规复、备份哪些数据。
    应用自己无法触发数据的备份和规复,仅能进行备份规复的配置。
应用触发数据备份规复(仅对体系应用开放)

 



应用接入数据备份规复

 


应用接入数据备份规复需要通过BackupExtensionAbility实现。
BackupExtensionAbility,是Stage模子中扩展组件ExtensionAbility的派生类。开发者可以通过修改配置文件定制备份规复框架的行为,包括是否答应备份规复,备份哪些文件等。
接口阐明

备份规复扩展本领API的接口利用指导请参见BackupExtensionAbility API参考和BackupExtensionContext API参考。
束缚与限定



  • 当备份规复时,所有待备份文件及目次的路径不得超过4095字节,否则将导致未定义行为。
  • 当备份目次时,应用历程必须拥有读取该目次及其所有子目次的权限(DAC中的r),否则将导致备份失败。
  • 当备份文件时,应用历程必须拥有搜索该文件所有祖父级目次的权限(DAC中的x),否则将导致备份失败。
  • 当启动模式标签"launchType"为"singleton"时不支持备份规复。
开发步调


  1. [/code] 开发者可根据自身的业务场景,选择对应的规复数据方式。以临时路径 [b]/data/storage/el2/base/.backup/restore/[/b] 为例:
  2. 假设应用的数据备份路径为:[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] 目次下。
  3. [b]includes默认值:[/b]
  4.  
  5. [list=1]
  6. [*] 在应用配置文件module.json5中注册extensionAbilities相关配置
  7. 新增"extensionAbilities"字段,此中注册类型"type"设置为"backup",元数据信息"metadata"新增一个"name"为"ohos. extension. backup"的条目。
  8. BackupExtensionAbility配置文件示例:
  9.  
  10. [code]{
  11.     "extensionAbilities": [
  12.         {
  13.             "description": "$string:ServiceExtAbility",
  14.             "icon": "$media:icon",
  15.             "name": "BackupExtensionAbility",
  16.             "type": "backup",
  17.             "exported": false,
  18.             "metadata": [
  19.                 {
  20.                     "name": "ohos.extension.backup",
  21.                     "resource": "$profile:backup_config"
  22.                 }
  23.             ],
  24.             // 在BackupExtension.ets文件里自定义继承BackupExtensionAbility,重写其中的onBackup/onBackupEx和               // onRestore/onRestoreEx方法,推荐使用onBackupEx/onRestoreEx。
  25.             // 如果没有特殊要求可以空实现,则备份恢复服务会按照统一的备份恢复数据规则进行备份恢复。
  26.             "srcEntry": "./ets/BackupExtension/BackupExtension.ets",
  27.         }      
  28.     ]
  29. }
复制代码
新增元数据资源配置文件
在元数据资源配置文件中,定义备份规复时需要传输的文件。元数据资源配置文件名称需要与module.json5中"metadata.resource"例如"backup_config.json"名称保持一致,其保存位置在工程的resources/base/profile文件夹下。
元数据资源配置文件示例:

 
  1. {
  2.     "allowToBackupRestore": true,
  3.     "includes": [
  4.         "/data/storage/el2/base/files/users/"
  5.     ],
  6.     "excludes": [
  7.         "/data/storage/el2/base/files/users/hidden/"
  8.     ],
  9.     "fullBackupOnly": false,
  10.     "restoreDeps": "",
  11. }
复制代码
开发者可以在BackupExtension.ets文件中自定义类继承的BackupExtensionAbility,通过重写其onBackup/onBackupEx和onRestore/onRestoreEx方法,使其到达在备份预加工应用数据大概在规复阶段加工待规复文件。
如果没有特殊要求可以空实现,则备份规复服务会按照同一的备份规复数据规则进行备份规复。
下面的示例展示了一个空实现的BackupExtension.ets文件。

 
  1. //onBackup && onRestore
  2. import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit';
  3. import {hilog} from '@kit.PerformanceAnalysisKit';
  4. const TAG = `FileBackupExtensionAbility`;
  5. export default class BackupExtension extends  BackupExtensionAbility {
  6.   //onBackup
  7.   async onBackup ()   {
  8.     hilog.info(0x0000, TAG, `onBackup ok`);
  9.   }
  10.   //onRestore
  11.   async onRestore (bundleVersion : BundleVersion) {
  12.     hilog.info(0x0000, TAG, `onRestore ok ${JSON.stringify(bundleVersion)}`);
  13.     hilog.info(0x0000, TAG, `onRestore end`);
  14.   }
  15. }
复制代码
  1. //onBackupEx && onRestoreEx
  2. import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit';
  3. interface ErrorInfo {
  4.   type: string,
  5.   errorCode: number,
  6.   errorInfo: string
  7. }
  8. class BackupExt extends BackupExtensionAbility {
  9.   //onBackupEx
  10.   async onBackupEx(backupInfo: string): Promise<string> {
  11.     console.log(`onBackupEx ok`);
  12.     let errorInfo: ErrorInfo = {
  13.       type: "ErrorInfo",
  14.       errorCode: 0,
  15.       errorInfo: "app diy error info"      
  16.     }
  17.     return JSON.stringify(errorInfo);
  18.   }
  19.   // onRestoreEx
  20.   async onRestoreEx(bundleVersion : BundleVersion, restoreInfo: string): Promise<string> {
  21.     console.log(`onRestoreEx ok ${JSON.stringify(bundleVersion)}`);
  22.     let errorInfo: ErrorInfo = {
  23.       type: "ErrorInfo",
  24.       errorCode: 0,
  25.       errorInfo: "app diy error info"
  26.     }
  27.     return JSON.stringify(errorInfo);
  28.   }
  29. }
复制代码
元数据资源配置文件阐明

   属性名称数据类型必填含义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默认值:

     
    1. {
    2.     "includes": [
    3.     "data/storage/el1/database/",
    4.     "data/storage/el1/base/files/",
    5.     "data/storage/el1/base/preferences/",
    6.     "data/storage/el1/base/haps/<module-name>/files/",
    7.     "data/storage/el1/base/haps/<module-name>/preferences/",
    8.     "data/storage/el2/database/",
    9.     "data/storage/el2/base/files/",
    10.     "data/storage/el2/base/preferences/",
    11.     "data/storage/el2/base/haps/<module-name>/files/",
    12.     "data/storage/el2/base/haps/<module-name>/preferences/",
    13.     "data/storage/el2/distributedfiles/"
    14.     ]
    15. }
    复制代码
     

    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
  • 回复

    使用道具 举报

    0 个回复

    倒序浏览

    快速回复

    您需要登录后才可以回帖 登录 or 立即注册

    本版积分规则

    诗林

    金牌会员
    这个人很懒什么都没写!

    标签云

    快速回复 返回顶部 返回列表