# 应用接入数æ®å¤‡ä»½æ¢å¤ 应用接入数æ®å¤‡ä»½æ¢å¤éœ€è¦é€šè¿‡BackupExtensionAbility实现。 BackupExtensionAbility,是[Stage模型](../application-models/stage-model-development-overview.md)䏿‰©å±•组件[ExtensionAbility](../application-models/extensionability-overview.md)的派生类。开å‘者å¯ä»¥é€šè¿‡ä¿®æ”¹é…置文件定制备份æ¢å¤æ¡†æž¶çš„行为,包括是å¦å…许备份æ¢å¤ï¼Œå¤‡ä»½å“ªäº›æ–‡ä»¶ç‰ã€‚ ## 接å£è¯´æ˜Ž 备份æ¢å¤æ‰©å±•能力API的接å£ä½¿ç”¨æŒ‡å¯¼è¯·å‚è§[BackupExtensionAbility APIå‚考](../reference/apis-core-file-kit/js-apis-application-backupExtensionAbility.md#backupextensionability)å’Œ[BackupExtensionContext APIå‚考](../reference/apis-core-file-kit/js-apis-file-backupextensioncontext.md)。 ## 约æŸä¸Žé™åˆ¶ - 当备份æ¢å¤æ—¶ï¼Œæ‰€æœ‰å¾…备份文件åŠç›®å½•的路径ä¸å¾—超过4095å—节,å¦åˆ™å°†å¯¼è‡´æœªå®šä¹‰è¡Œä¸ºã€‚ - 当备份目录时,应用进程必须拥有读å–该目录åŠå…¶æ‰€æœ‰å目录的æƒé™ï¼ˆDACä¸çš„`r`),å¦åˆ™å°†å¯¼è‡´å¤‡ä»½å¤±è´¥ã€‚ - 当备份文件时,应用进程必须拥有æœç´¢è¯¥æ–‡ä»¶æ‰€æœ‰ç¥–父级目录的æƒé™ï¼ˆDACä¸çš„`x`),å¦åˆ™å°†å¯¼è‡´å¤‡ä»½å¤±è´¥ã€‚ - 当备份æ¢å¤æ—¶ï¼Œæ‰€æœ‰å¾…备份æ¢å¤çš„æ–‡ä»¶åŠç›®å½•䏿”¯æŒç›¸å¯¹è·¯å¾„(../)和软链接。 ## 开呿¥éª¤ 1. 在应用é…置文件`module.json5`䏿³¨å†Œ`extensionAbilities`相关é…ç½® 新增`"extensionAbilities"`å—æ®µï¼Œå…¶ä¸æ³¨å†Œç±»åž‹`"type"`设置为`"backup"`,元数æ®ä¿¡æ¯["metadata"](../reference/apis-ability-kit/js-apis-bundleManager-metadata.md)新增一个`"name"`为`"ohos. extension. backup"`çš„æ¡ç›®ã€‚ BackupExtensionAbilityé…置文件示例: ```json { "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`文件夹下。 元数æ®èµ„æºé…置文件示例: ```json { "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`文件: ```ts //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`); } } ``` ```ts //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 | å—符串数组 | å¦ | 应用沙箱ä¸éœ€è¦å¤‡ä»½çš„æ–‡ä»¶å’Œç›®å½•。<br>当模å¼ä¸²ä»¥éž/å¼€å§‹æ—¶ï¼Œè¡¨ç¤ºä¸€ä¸ªç›¸å¯¹äºŽæ ¹è·¯å¾„çš„ç›¸å¯¹è·¯å¾„ã€‚<br>`includes`支æŒçš„路径清å•åˆ—è¡¨å¦‚ä¸‹è¿°ä»£ç æ®µå†…容所示,当é…ç½®`includes`时请确ä¿é…置路径范围包å«åœ¨å…¶ä¸ã€‚<br>当`includes`å·²é…置时,备份æ¢å¤æ¡†æž¶ä¼šé‡‡ç”¨å¼€å‘者é…置的模å¼ä¸²ï¼Œå¦åˆ™å°†ä¼šé‡‡ç”¨ä¸‹è¿°ä»£ç 段内容作为默认值。 | | excludes | å—符串数组 | å¦ | `includes`䏿— éœ€å¤‡ä»½çš„ä¾‹å¤–é¡¹ã€‚æ ¼å¼åŒ`includes`。<br>在é…ç½®`excludes`时,请确ä¿å…¶èŒƒå›´åœ¨`includes`çš„å集ä¸ã€‚<br>当`excludes`å·²é…置时,备份æ¢å¤æ¡†æž¶ä¼šé‡‡ç”¨å¼€å‘者é…置的模å¼ä¸²ï¼Œå¦åˆ™å°†ä¼šé‡‡ç”¨**空数组**作为默认值。 | | fullBackupOnly | 布尔值 | å¦ | 是å¦ä½¿ç”¨åº”用默认æ¢å¤ç›®å½•,默认值为false。当值为true时,æ¢å¤æ•°æ®æ—¶ä¼šé€šè¿‡ä¸´æ—¶è·¯å¾„进行缓å˜ï¼Œä¸´æ—¶è·¯å¾„å¯é€šè¿‡[backupDir](../reference/apis-core-file-kit/js-apis-file-backupextensioncontext.md)获å–。当值为false或者ä¸é…ç½®è¯¥å—æ®µæ—¶ï¼Œæ¢å¤æ•°æ®ä¼šä»¥'/'ä¸ºæ ¹ç›®å½•è§£åŽ‹æ•°æ®ã€‚ | | restoreDeps | å—符串 | å¦ | **䏿ލè使用**,应用æ¢å¤æ—¶ä¾èµ–其他应用数æ®ï¼Œé»˜è®¤å€¼ä¸º"",需è¦é…ç½®ä¾èµ–应用å称。当å‰ä»…æ”¯æŒæœ€å¤šä¸€ä¸ªä¾èµ–项。é…置的ä¾èµ–仅在一次æ¢å¤ä»»åŠ¡ä¸Šä¸‹æ–‡ç”Ÿæ•ˆï¼Œå¦‚æžœä¸€æ¬¡æ¢å¤ä»»åС䏿²¡æœ‰æ£€æµ‹åˆ°ä¾èµ–应用,则忽略该ä¾èµ–æè¿°ç»§ç»æ‰§è¡Œæ¢å¤ä»»åŠ¡ã€‚**ä¾èµ–应用未æ¢å¤æˆ–者æ¢å¤å¤±è´¥éƒ½ä¼šå¯¼è‡´æœ¬åº”用æ¢å¤å¤±è´¥**。 | | extraInfo | json串 | å¦ | é¢å¤–ä¿¡æ¯å¯é€šè¿‡è¯¥å—æ®µä¼ é€’ã€‚ | > **说明:** > > 1ã€**有关fullBackupOnlyå—æ®µçš„说明** > > - 当fullBackupOnly为false时,æ¢å¤æ•°æ®ä¼šä»¥ **/** ä¸ºæ ¹ç›®å½•è§£åŽ‹æ•°æ®ï¼ŒåŒè·¯å¾„下的åŒå文件会被覆盖。 > - 当fullBackupOnly为true时,æ¢å¤æ•°æ®ä¼šä»¥ä¸´æ—¶ç›®å½•ä¸ºæ ¹ç›®å½•è§£åŽ‹æ•°æ®ï¼Œå¼€å‘者需è¦åœ¨OnRestore/OnRestoreEx内自行实现æ¢å¤æ•°æ®çš„逻辑,进行最终的æ¢å¤ã€‚ > > å¼€å‘è€…å¯æ ¹æ®è‡ªèº«çš„业务场景,选择对应的æ¢å¤æ•°æ®æ–¹å¼ã€‚ > > 示例: > å‡è®¾åº”用的数æ®å¤‡ä»½è·¯å¾„为:**data/storage/el2/base/files/A/** 。那么在æ¢å¤æ—¶ï¼Œå¦‚æžœé…置了fullBackupOnly为false,数æ®ä¼šè¢«ç›´æŽ¥è§£åŽ‹åˆ°ï¼š**/data/storage/el2/base/files/A/**目录下,如果é…置了fullBackupOnly为true,数æ®åˆ™ä¼šè¢«è§£åŽ‹åˆ°ï¼š**临时路径[backupDir](../reference/apis-core-file-kit/js-apis-file-backupextensioncontext.md) + /restore/data/storage/el2/base/files/A/** 目录下。 **includes支æŒçš„路径清å•列表如下:** ```json { "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/" ] } ``` ## 相关实例 针对应用接入数æ®çš„备份与æ¢å¤ï¼Œæœ‰ä»¥ä¸‹ç›¸å…³å®žä¾‹å¯ä¾›å‚考: - [应用接入数æ®å¤‡ä»½æ¢å¤ï¼ˆArkTS)(Full SDK)(API10)](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/FileManagement/FileBackupExtension)