# 应用接入数据备份恢复
应用接入数据备份恢复需要通过BackupExtensionAbility实现。
BackupExtensionAbility,是[Stage模型](../application-models/stage-model-development-overview.md)中扩展组件[ExtensionAbility](../application-models/extensionability-overview.md)的派生类。开发者可以通过修改配置文件定制备份恢复框架的行为,包括是否允许备份恢复,备份哪些文件等。
## 约束与限制
- 当备份恢复时,所有待备份文件及目录的路径不得超过4095字节,否则将导致未定义行为。
- 当备份目录时,应用进程必须拥有读取该目录及其所有子目录的权限(DAC中的`r`),否则将导致备份失败。
- 当备份文件时,应用进程必须拥有搜索该文件所有祖父级目录的权限(DAC中的`x`),否则将导致备份失败。
## 开发步骤
1. 在应用配置文件`module.json5`中注册`extensionAbilities`相关配置
新增`"extensionAbilities"`字段,其中注册类型`"type"`设置为`"backup"`,元数据信息["metadata"](../reference/apis/js-apis-bundleManager-metadata.md)新增一个`"name"`为`"ohos. extension. backup"`的条目。
BackupExtensionAbility配置文件示例:
```json
{
"extensionAbilities": [
{
"description": "$string:ServiceExtAbility",
"icon": "$media:icon",
"name": "BackupExtensionAbility",
"type": "backup",
"visible": true,
"metadata": [
{
"name": "ohos.extension.backup",
"resource": "$profile:backup_config"
}
],
"srcEntrance": "",
}
]
}
```
2. 新增元数据资源配置文件
在元数据资源配置文件中,定义备份恢复时需要传输的文件。元数据资源配置文件名称需要与`module.json5`中`"metadata.resource"`名称保持一致,其保存位置在工程的`resource/profile`文件夹下。
元数据资源配置文件示例:
```json
{
"allowToBackupRestore": true,
"includes": [
"/data/storage/el2/base/files/users/*/*.json"
],
"excludes": [
"/data/storage/el2/base/files/users/*/hidden.json"
],
}
```
### 元数据资源配置文件说明
| 属性名称 | 数据类型 | 必填 | 含义 |
| -------------------- | ---------- | ---- | ----------------------- |
| allowToBackupRestore | 布尔值 | 是 | 是否允许备份恢复,默认为false |
| includes | 字符串数组 | 否 | 应用沙箱中需要备份的文件和目录。
数组中的每一项均为模式串,可包含SHELL风格通配符(`*`,`?`,`[`)。
当模式串以非/开始时,表示一个相对于根路径的相对路径。
当`includes`已配置时,备份恢复框架会采用开发者配置的模式串,否则将会采用下述代码段内容作为默认值。 |
| excludes | 字符串数组 | 否 | `includes`中无需备份的例外项。格式同`includes`。
当`excludes`已配置时,备份恢复框架会采用开发者配置的模式串,否则将会采用**空数组**作为默认值。 |
**includes默认值:**
```json
{
"includes": [
"data/storage/el2/database/",
"data/storage/el2/base/files/",
"data/storage/el2/base/preferences/",
"data/storage/el2/base/haps/*/database/",
"data/storage/el2/base/haps/*/files/",
"data/storage/el2/base/haps/*/preferences/",
]
}
```
## 相关实例
针对应用接入数据的备份与恢复,有以下相关实例可供参考:
- [应用接入数据备份恢复(ArkTS)(Full SDK)(API10)](https://gitee.com/openharmony/applications_app_samples/tree/OpenHarmony-4.0-Release/code/BasicFeature/FileManagement/FileBackupExtension)