
回复
兄弟们,数据备份这事儿,就像给应用数据买保险——平时不觉得重要,真出问题时才知道香。HarmonyOS Next的备份框架整得挺明白,今天就聊聊怎么管好应用沙箱和备份目录的映射关系,让数据迁移时不踩坑。
每个应用都有自己的沙箱目录,就像私人仓库,特点是:
常见沙箱路径长这样:
/data/user_de/{userId}/{包名}/
:存用户可见的基础数据/data/user/{userId}/{包名}/
:存应用私有数据,比如设置项/data/media/{userId}/Android/data/{包名}/
:存图片、音频这些媒体文件系统升级或迁移时,会把沙箱数据搬到备份目录,位置在:
/data/storage/el1/base/.backup/restore/{包名}/de/
/data/storage/el2/base/.backup/restore/{包名}/ce/
沙箱目录 | 备份目录 | 存啥数据 |
---|---|---|
/data/user_de/... |
/el1/.../de/ |
用户可见的基础数据,比如账号信息 |
/data/user/... |
/el2/.../ce/ |
应用私有数据,比如偏好设置 |
/data/media/.../data/ |
/el2/.../A/data/ |
图片、音频等媒体文件 |
EL1和EL2咋区分?EL1像"客厅",存用户能看到的数据;EL2像"卧室",存应用自己用的私密数据。
在backup_config.json
里告诉系统该备份哪些目录:
includes
:要备份的目录,用绝对路径excludes
:排除的目录,比如缓存fullBackupOnly
:是否只全量备份比如咱做个音乐App,要备份用户收藏和播放历史,不备份缓存:
{
"allowToBackupRestore": true,
"includes": [
"/data/storage/el2/base/files/user_favorites/", // 用户收藏的歌曲
"/data/storage/el2/base/files/play_history/" // 播放历史
],
"excludes": [
"/data/storage/el2/base/files/cache/" // 缓存的音频文件,占空间大,别备份
],
"fullBackupOnly": false // 支持增量备份
}
数据类型 | 沙箱目录示例 | 备份目录示例 | 备份建议 |
---|---|---|---|
用户账号 | /data/user_de/... |
/el1/.../de/ |
必须备份,不然用户得重新登录 |
播放历史 | /data/user/.../history/ |
/el2/.../ce/ |
备份,恢复后播放更顺手 |
下载的音乐 | /data/media/.../music/ |
/el2/.../A/data/music/ |
看用户选择,占空间可取消 |
临时缓存 | /data/user/.../cache/ |
不配置或加入excludes | 别备份,浪费空间 |
备份后数据丢失:
backup_config.json
的includes路径是否正确备份文件太大:
恢复后应用闪退:
之前做相册App,备份时把所有图片都存了,结果备份文件好几个GB。后来改成:
兄弟们在开发时记得:
把这些点做好,用户换设备或升级系统时,数据迁移就跟喝水一样简单。数据备份这事儿,看着麻烦,实则是给应用和用户上了份保险,值得咱们花时间整明白!