用 GitHub Contents API 给移动端/本地应用做零成本版本化备份的完整方案,出自 老APK逆向复活方法论 工程的 GitHub 同步功能。
GitHub Contents API 关键约束
- 上传:
PUT /repos/{owner}/{repo}/contents/{path},body 为 message + content(base64)→ 201。 - 覆盖已有文件必须带原文件的
sha(先 GET 拿 sha;404 = 不存在,直接新建)。 - 请求头
User-Agent必填,GitHub 拒无 UA 请求。 - 认证用 fine-grained token:只勾目标数据仓 + Contents 读写,绝不复用推代码的大权限 token。
- 每次备份天然是一个 commit,网页端可回滚任意版本——等于免费版本化备份后端。
- 开发顺序:先用 curl 手工跑通全流程(PUT 201 → GET → 带 sha PUT 200 → DELETE 200),再写客户端代码。
SQLite 整库快照
- 快照用
VACUUM INTO 'tmpfile'(一致性快照),失败兜底直接读 db 文件。 - 恢复时必须先删
-journal/-wal/-shm再替换 db 文件——否则残留 WAL 会把旧数据写回新库,这是恢复后数据”回到过去”的经典坑。 - 恢复完杀进程重启(
Process.killProcess(Process.myPid())),避免内存中的旧 DAO 缓存污染新库。
适用判断
适合单文件 ≤100MB、低频写入的个人数据备份(任务库、配置、生成产物)。不适合高频写、大文件、多端并发编辑的场景。
原始素材
- playbook