ワンクリックで
backup-consistency-check
检查备份系统中选择器、备份逻辑、恢复逻辑、备份信息显示之间的数据一致性。当用户问备份对不对、备份选漏了没、恢复和备份匹配吗、备份信息准不准时调用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
检查备份系统中选择器、备份逻辑、恢复逻辑、备份信息显示之间的数据一致性。当用户问备份对不对、备份选漏了没、恢复和备份匹配吗、备份信息准不准时调用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | backup-consistency-check |
| description | 检查备份系统中选择器、备份逻辑、恢复逻辑、备份信息显示之间的数据一致性。当用户问备份对不对、备份选漏了没、恢复和备份匹配吗、备份信息准不准时调用。 |
自动对比备份系统中多个位置定义的备份项,找出不匹配、遗漏、多余的问题。
备份系统有 5 个关键位置 定义了"要备份/恢复/显示哪些东西",它们之间必须保持一致:
| 编号 | 位置 | 文件 | 作用 |
|---|---|---|---|
| ① | 实际备份逻辑 | app/src/main/java/io/legado/app/help/storage/Backup.kt | 真正执行备份,导出哪些文件 |
| ② | 备份选择器 | app/src/main/java/io/legado/app/help/storage/BackupSelectorConfig.kt | 用户在 UI 上可以选择备份哪些项 |
| ③ | 安卓端备份信息 | app/src/main/java/io/legado/app/help/storage/BackupInfoHelper.kt | 安卓端"查看备份信息"弹窗展示 |
| ④ | Web端备份信息 | app/src/main/java/io/legado/app/api/controller/BackupController.kt | Web端备份概览页面展示 |
| ⑤ | 恢复逻辑 | app/src/main/java/io/legado/app/help/storage/Restore.kt | 从备份中恢复哪些文件 |
逐一读取以下 5 个文件,提取每个文件中定义的备份项列表(文件名 + 显示名):
读取 backupFileNames 数组(约第 105-130 行),提取所有文件名字符串。
同时读取 backup() 方法(约第 351-562 行),检查:
selectedFiles.contains(xxx) 的条件分支,确认实际写了哪些文件backupFileNames 中但 backup() 里没有导出逻辑backup() 里导出了但不在 backupFileNames 中读取 allItems 列表(约第 20-44 行),提取每个 BackupItem 的:
key(唯一标识)fileName(文件名)title(显示名)group(分组)读取 displayNameMap(约第 51-73 行),提取文件名到显示名的映射。
读取 getBackupOverview() 方法(约第 81-156 行),提取:
dbItems 列表中的所有文件名configFiles 列表中的所有文件名DirectLinkUpload.ruleFileName)读取 generateBackupOverview() 方法(约第 301-415 行),提取:
backupItems 列表中的所有 BackupItemDefconfigItems 列表中的所有 ConfigItemDef读取 restoreSelectedFiles() 方法(约第 188-456 行)和 restore() 方法(约第 469-700+ 行),提取:
if ("xxx.json" in selectedSet) 或 if ("xxx.xml" in selectedSet) 的条件将提取到的 5 个列表汇总成一张对比表,格式如下:
| 文件名 | ① 备份逻辑 | ② 选择器 | ③ 安卓信息 | ④ Web信息 | ⑤ 恢复逻辑 | 状态 |
|--------|:---------:|:-------:|:---------:|:--------:|:---------:|:----:|
| bookshelf.json | ✅ | ✅ | ✅ | ✅ | ✅ | OK |
| xxx.json | ✅ | ❌ | ✅ | ❌ | ✅ | 不一致 |
对每个文件名检查它在 5 个位置是否都出现,按以下规则分类:
单独检查 BackupInfoHelper.kt 的 displayNameMap:
getBackupOverview() 中出现的文件名检查 BackupInfoHelper.kt 的 categoryConfig 分类规则:
按照以下格式输出最终报告:
## 备份一致性检查报告
### 对比矩阵
(完整的 5 列对比表)
### 发现的问题
#### ❌ 严重问题
(功能上会导致数据丢失或误导用户的问题)
#### ⚠️ 一般问题
(逻辑不一致但不影响功能的问题)
#### 💡 建议
(可优化的点)
### 修复建议
(针对每个问题给出具体的修复方案)
app/src/main/java/io/legado/app/help/storage/Backup.kt
app/src/main/java/io/legado/app/help/storage/BackupSelectorConfig.kt
app/src/main/java/io/legado/app/help/storage/BackupInfoHelper.kt
app/src/main/java/io/legado/app/help/storage/Restore.kt
app/src/main/java/io/legado/app/api/controller/BackupController.kt
DirectLinkUpload.ruleFileName 是动态值(运行时常量),不是字符串字面量,提取时需注意ReadBookConfig.configFileName、ReadBookConfig.shareConfigFileName、ThemeConfig.configFileName、BookCover.configFileName 同理,需在代码中找到实际值readRecordSession.json 是一个特殊的灰色地带:Restore 会尝试读取它,但 Backup 从不导出它bg 目录)是文件级备份,不是 JSON,需要单独关注runtimeSourceCache.json 只在 BackupConfig.fullBackup 为 true 时才会备份backupFileNames 和 backup() 方法可能不完全同步——两个地方都需检查通过对比 entities、schema JSON 和迁移方案,诊断并修复 Android Room 数据库在 entity 或 database 变更后的 schema 校验崩溃;增加数据库版本号,添加重命名/新增/删除列的迁移,并验证生成的 Room 代码。
优化Markdown文件中的ASCII流程图,使其更适合手机显示。将宽大的ASCII边框图转换为紧凑的树形结构。当用户要求修复流程图在手机上的显示问题时调用。
分析 Compose 界面是否使用了项目中可复用的组件和主题系统。适用于检查 Compose 屏幕是否符合项目规范或需要重构以使用共享组件。
Legado Plus 模块学习讲解器。当用户想学习某个模块、询问模块功能、请求讲解代码架构时调用。提供生动详尽的模块讲解,包括架构图、代码走读、实践任务。
Critical Android code review for Payoo Android app. Focuses on high-impact issues - naming conventions, memory leaks, UIState patterns, business logic placement, lifecycle management, and MVI/MVVM pattern violations. Use when reviewing Kotlin files, pull requests, or checking ViewModels, Activities, Fragments, UseCases, and Repositories.
安卓原生模块学习讲解器。当用户想学习某个模块、询问模块功能、请求讲解代码架构时调用。提供生动详尽的模块讲解,包括架构图、代码走读、实践任务。