SuperAPI AI 工具集

app-backup-to-zip-mediastore

编程与开发

查看项目

更新于 10-17 16:16

技能介绍

用途

该技能用于在 Android 应用内实现“把应用备份成一个 zip 文件,并放到用户自己的 Downloads 文件夹”这一功能,且不需要申请存储权限。它同时负责只保留最新的 N 个归档,避免旧备份无限累积。

主要能力

  • 对数据库的预写日志(WAL)执行 checkpoint,然后复制数据库文件,确保备份包含最新提交。
  • 在应用自己的缓存目录中组装 zip,再流式写入系统媒体库,避免中途失败留下截断文件。
  • 通过向媒体库的 Downloads 集合插入一行记录来创建文件,而不是按路径写入公共目录,因此无需存储权限。
  • 支持可选载荷(如媒体缓存数据库、下载文件夹),各自带独立开关和存在性检查。
  • 实现保留策略:按添加日期降序排序,删除前 N 个之后的所有归档,只保留最新 N 个。
  • 在清理时对名称前缀和后缀做二次校验,避免误删其他应用写入的同名模式文件。

使用方式

资料给出的流程顺序是:

  1. 先 checkpoint,再复制数据库文件。数据库处于 WAL 模式时,仅复制主文件会丢失最近提交,因此必须先让数据库把日志合并回去。checkpoint 本身是通过 ORM 的原始查询逃生通道执行 PRAGMA wal_checkpoint(full)。
  2. 在应用缓存目录中组装 zip。可选载荷各自带开关和存在性检查。
  3. 向媒体库插入一行记录,拿到 URI 后把临时 zip 流式写入。
  4. 复制成功后执行保留策略,删除旧归档。

代码示例中展示了设置文件写入、数据库 checkpoint 后复制、媒体库插入(含 DISPLAY_NAME、MIME_TYPE、RELATIVE_PATH)以及按 DATE_ADDED DESC 排序后删除多余归档的写法。

适用场景

  • Android 应用需要把自身数据导出为 zip 并放到用户 Downloads 文件夹。
  • 需要在不申请存储权限的前提下写入公共下载目录。
  • 需要定期自动备份并限制归档数量。
  • 需要实现备份与恢复,且恢复时要求先 checkpoint、再关闭数据库、再覆盖文件。

限制与注意事项

  • 仅适用于 Android。
  • 每次读取数据库文件都需要单独 checkpoint;每次写入还需要额外关闭数据库。恢复流程需要 checkpoint、closeDatabase、覆盖文件三步,并在恢复后立即重启进程。
  • RELATIVE_PATH 在 scoped-storage API 级别以下不存在,插入和保留查询都需要相同的版本分支,否则清理会因 provider 拒绝该列而什么都不删。
  • 保留查询按排序而非比较时间戳来保留最新,排序方向写反会删掉本想保留的归档。
  • LIKE 选择不是身份校验,游标循环中需要重新检查名称前缀和后缀。
  • 禁用功能时应返回成功而非失败,否则会白白消耗重试预算。
  • 验证时需检查每个以文件方式打开数据库的位置是否先 checkpoint,恢复后检查备份前最后一步操作,用设备自带文件管理器打开文件,并临时降低保留数量验证幸存者是最新的。

资料未提供该技能的具体安装命令、收费方式、支持平台版本范围或性能数据。