room-migrations-at-scale
该技能文档面向长期维护的 Room 数据库,讲解在历经二十多个 schema 版本后如何保持可升级能力。核心观点是:迁移应被视为一张有向图,而不是一条线性阶梯,需要显式声明完整的 (from,to) 边集合,而不能假设用户只会逐级跳一个版本。文档区分了构建期由 schema 差异生成、只能表达表与列增删改的自动迁移,以及任何涉及数据搬移都必须手写的迁移;并指出跳过中间版本时要用直连边跨过缺口,否则旧版本数据库无法打开。文中还列出若干陷阱:生成式迁移无法移动数据且失败不报错、手写迁移中拼接字符串值而非绑定参数带来的引号风险、触发器与视图不被 Room 管理需放在 onOpen 回调中幂等创建、多平台模块中迁移列表注册在平台 actual 里、schema 导出文件需纳入版本控制、删除规范只是声明而不执行删除。最后给出验证方法:用脚本检查所有版本的可达性、确认迁移与回调仅在 Android actual 注册、在草稿库上验证触发器可重复创建,以及用旧版本数据库文件而非全新安装来验证升级路径。