数据库损坏恢复 —— collection 打不开时的急救方案
现象:AnkiDroid 打开后白屏、崩溃、牌组列表为空
如果你打开 AnkiDroid 后遇到:
- 白屏几秒后闪退
- 牌组列表显示"零牌组"
- 点任何按钮都没反应
- 弹出"数据库损坏"错误对话框
大概率是SQLite collection 文件损坏了。下面按恢复成功率从高到低给出方案。
方案 1:从 AnkiWeb 同步恢复(首选)
如果你的数据之前同步到过 AnkiWeb:
- 卸载 AnkiDroid(清掉损坏的本地数据)
- 重新安装最新版
- 首次启动时用 AnkiWeb 账号登录
- 同步方向选 从 AnkiWeb 下载
- 所有牌组、卡片、学习历史、媒体全部从云端拉回来
这是最快最稳的方案——前提是 AnkiWeb 上的数据是最新的。
方案 2:从自动备份恢复
如果 AnkiWeb 上的数据不是最新(手机上还有没同步的新内容),先尝试自动备份:
- 先不要卸载 App(卸了备份也没了)
- 用 USB 或文件管理器找到 AnkiDroid 的备份目录:
内部存储 / Android / data / com.ichi2.anki / files / AnkiDroid / backups /
- 把最新的备份 .apkg 文件拷贝出来(保存到电脑或网盘)
- 卸载 AnkiDroid
- 重新安装
- 用拷贝出来的 .apkg 导入恢复(从文件管理器点 → 用 AnkiDroid 打开)
自动备份不包含媒体文件,恢复后立即跑"检查媒体" + 同步 AnkiWeb,媒体会自动回来。
方案 3:修复损坏的数据库(进阶)
如果你不想卸载重装,可以尝试修复:
- 打开手机文件管理器(或用电脑 USB 连)
- 找到 AnkiDroid 的主数据库文件:
内部存储 / Android / data / com.ichi2.anki / files / AnkiDroid / collection.anki2
- 把这个文件复制一份到电脑上
- 用 SQLite 工具(如 DB Browser for SQLite)打开它,执行:
PRAGMA integrity_check;
- 如果输出不是
ok,说明数据库有坏块,可以尝试:
VACUUM;
- 修复完的数据库重新命名覆盖回手机上的那个位置
- 打开 AnkiDroid 测试
这一步需要对 SQLite 有基本了解。如果你不确定自己在做什么,回到方案 1 或方案 2 更安全。
方案 4:拆 .colpkg 手动恢复
如果你有一份完整的 .colpkg 备份:
- 把 .colpkg 文件拷贝到电脑
- 改后缀为
.zip然后解压 - 解压出来会有
collection.anki2(数据库)和media/(媒体文件)目录 - 在新设备上安装 AnkiDroid 后,先不要打开
- 用 USB 把解压出来的数据库和媒体文件手动放到 AnkiDroid 的对应位置
- 然后打开 App
这比直接导入 .colpkg 更底层——能绕过 AnkiDroid 导入过程中可能遇到的问题。
数据库损坏后预防复发
- 不要在 AnkiDroid 运行时强行关闭它——正常退出或等它自己关
- USB 传输 .apkg / .colpkg 时等拷贝完再拔线
- 每天至少同步一次 AnkiWeb
- 定期手动导出 .colpkg 完整备份(含媒体文件)
- 自动备份保留天数设长一点(90 天)
- 手机上尽量不要同时运行多个会消耗大量存储的应用
如果所有方案都失败
实在恢复不了,那就接受现实——从头开始做牌组。好在:
- 你对 Anki 和 SRS 的理解不会丢
- 之前做过的笔记类型和模板可以重新创建
- 共享牌组站可以重新下载牌组
- 最重要的是,这次记得定期同步 + 手动备份