# Mobile_tool **Repository Path**: zhang.wei/mobile_tool ## Basic Information - **Project Name**: Mobile_tool - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-25 - **Last Updated**: 2026-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # **手机数据备份与恢复软件(PC端 + 手机端协同)— 产品需求文档(PRD v4.0)** > **版本**:v4.0(功能细化完整版)\ > **日期**:2026-08-24\ > **状态**:待评审\ > **适用平台**: > > - **PC 端**:Windows 10/11、macOS 12+、Linux(主流发行版) > - **手机端**:Android 8.0 - Android 16(含小米、华为、荣耀、OPPO、vivo、三星、Pixel 等) ## **1. 项目背景与目标** ### **1.1 背景与痛点** (此部分同 v3.1,略) ### **1.2 产品目标** 打造一款**通用、可靠、安全、易用**的手机数据备份与恢复软件,定位类似“小米手机助手”,但**跨品牌通用**。 **核心目标**: 1. 支持联系人、短信、通话记录、照片/视频、音乐、文档、应用(含 APK 和应用数据)等数据类型的备份与恢复。 2. 通过 USB 或 Wi-Fi 连接手机,**一键完成**备份/恢复,操作简单如小米手机助手。 3. **备份时用户可灵活选择**:仅备份应用安装包(APK),或同时备份应用及其私有数据。 4. **恢复时用户可灵活选择**:仅恢复应用安装包(APK),或同时恢复应用及其私有数据。 5. 支持备份到本地 PC 目录、NAS(SMB)、WebDAV、SFTP 等存储后端。 6. 默认端到端加密,用户掌握密钥。 7. 支持增量备份、自动备份、版本管理、选择性恢复。 8. **零磁盘占用**:备份过程中**不在手机端写入任何临时文件**,手机存储耗尽时仍可正常备份。 ## **2. 范围与假设** (此部分同 v3.1,略) ## **3. 用户与使用场景(新增场景)** **场景** **描述** **换机迁移(含数据)** 用户换新手机,备份时选择“应用+数据”,恢复时选择“应用+数据”,完整迁移游戏存档、应用设置 **仅备份安装包(腾空间)** 手机存储紧张,用户仅备份已安装应用的 APK 安装包到 PC,然后放心卸载不常用的应用 **仅恢复应用(数据不要)** 用户手机恢复出厂设置后,仅想快速装回常用应用,不想恢复旧数据(避免覆盖新设置) **仅恢复数据(应用已装)** 用户已安装最新版应用,但想从历史备份中恢复游戏进度或聊天记录(仅恢复数据,不覆盖 APK) **应用数据抢救(存储耗尽)** 手机剩余空间不足 100MB,用户只选择备份“微信数据”(忽略照片视频),利用零落地技术将关键数据救出 ## **4. 总体产品架构** (架构图同 v3.1,新增“应用备份粒度控制模块”) text ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ PC 端软件(桌面应用) │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ 业务层:备份引擎、恢复引擎、快照管理、调度管理、冲突处理 │ │ │ │ 新增:应用备份粒度控制器(仅APK / APK+数据) │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ 通信层:ADB + Socket(与手机端 APK 通信) │ │ 存储适配层:本地 / SMB / WebDAV / SFTP │ │ 安全层:AES-256-GCM 加密、密钥管理 │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ adb reverse / Wi-Fi Socket ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 手机端辅助 APK(< 2MB,无桌面图标) │ │ 数据源执行器:MediaStore / ContentProvider / FileSystem / AppData │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ## **5. 功能需求** ### **5.1 设备连接与管理** (FR-001 \~ FR-010 同 v3.1,略) *** ### **5.2 备份库管理** (FR-011 \~ FR-018 同 v3.1,略) *** ### **5.3 数据源与备份范围(重点细化“应用”部分的粒度)** #### **5.3.1 支持的数据源总览** **数据源** **非 Root 可用** **优先级** **备份粒度选项** 联系人 ✅ 是 P0 全量 短信/彩信 ⚠️ 需授权 P0 全量 通话记录 ✅ 是 P0 全量 照片/视频 ✅ 是 P0 全量/按相册/按时间 音频 ✅ 是 P1 全量 文档/文件 ✅ 是 P1 按用户指定目录 日历 ✅ 是 P1 全量 **应用(APK 安装包)** ✅ 是 **P0** **按应用逐个勾选** **应用数据(私有数据)** ⚠️ 需 Shizuku **P0** **按应用逐个勾选** 系统设置 ✅ 部分 P2 全量 Wi-Fi 密码 ❌ 需 Root P2 全量 #### **5.3.2 核心功能:应用备份粒度控制(新增,重点)** **概念定义**: - **“应用(APK)”**:指从手机中提取的 `.apk` 安装包文件。仅备份 APK 时,不涉及任何用户数据。 - **“应用数据”**:指应用在 `/data/data//` 下的私有文件,包括 `shared_prefs`(设置)、`databases`(数据库)、`files`(用户文件)、`cache`(缓存,默认跳过)等。 **备份时,用户对每个应用有三种互斥选择**(以界面单选按钮或下拉菜单呈现): **选项** **英文标识** **行为** **适用场景** **① 不备份** Skip 跳过该应用的全部内容 系统应用或用户不关心 **② 仅备份 APK** APK Only 仅提取并备份该应用的 APK 安装包(不读取任何私有数据) 腾出手机空间,或仅需安装包归档 **③ 备份 APK + 数据** Full (APK + Data) 同时备份 APK 和该应用的所有私有数据(需 Shizuku 或 Root) 换机迁移、游戏存档备份 > **默认值**:用户首次使用时,系统将“不备份”设为默认,引导用户自行勾选。对于已安装的第三方应用,可提供“一键全选为‘仅备份 APK’”和“一键全选为‘备份 APK + 数据’”的快捷操作。 #### **5.3.3 应用列表展示要求(UI 关键)** - 应用列表以表格形式展示,包含以下列: - **勾选框**(复选框,用于选中该应用) - **应用图标** - **应用名称** + **包名**(小字) - **版本号** - **备份粒度下拉框**:`不备份` / `仅 APK` / `APK + 数据` - **APK 大小**(估算) - **数据大小**(估算,需通过 Shizuku 预扫描) - **备份状态**(上次备份时间/版本) - **顶部工具栏**: - “全选” / “取消全选” - “全部设为仅 APK” - “全部设为 APK + 数据” - “搜索应用” (支持按名称/包名搜索) - “筛选” (系统应用 / 用户应用 / 已勾选 / 有更新) #### **5.3.4 数据源功能要求(FR 编号)** **编号** **功能** **需求描述** **优先级** FR-019 数据源开关 用户可勾选需要备份的数据大类(联系人、短信、照片、应用等) P0 FR-020 **应用粒度选择** 在“应用”大类下,用户可**针对每个应用**独立选择备份粒度(不备份 / 仅 APK / APK+数据) **P0(核心)** FR-021 **一键批量设置** 支持一键将所有应用设为“仅 APK”或“APK+数据”,便于快速操作 P0 FR-022 应用数据大小预扫描 备份前,通过手机端 APK 预扫描每个应用的数据大小(仅统计大小,不拉取内容),在 UI 上显示,帮助用户决策 P0 FR-023 Shizuku 状态检测 若用户对某应用选择了“APK+数据”,但手机未激活 Shizuku,则在用户点击“开始备份”时给出明确警告和引导 P0 FR-024 照片/视频范围选择 支持按相册、时间范围筛选 P1 FR-025 文件目录选择 用户可指定手机上的文件夹进行备份 P1 FR-026 权限/模式说明 对于应用数据,明确提示当前模式(Shizuku)的能力和风险 P0 *** ### **5.4 备份执行引擎(重点修改,支持粒度控制)** **编号** **功能** **需求描述** **优先级** FR-027 预检 备份前检查设备连接、ADB 可用性、存储权限、Shizuku 状态(若勾选“APK+数据”) P0 FR-028 **应用备份分发器** 遍历用户的应用选择列表,按粒度分发:\ ① “仅 APK” → 调用 APK 提取器(走 `pm path` + 流式拉取)\ ② “APK+数据” → 同时调用 APK 提取器 + 数据备份执行器(Shizuku 流式读取) **P0** FR-029 **APK 增量备份** 仅当应用的 `versionCode` 发生变化时才重新备份 APK,否则复用历史备份中的 APK 块 P0 FR-030 **应用数据增量备份** 对于应用数据,记录每个文件的修改时间和哈希值,仅备份变更部分 P0 FR-031 手机端存储零占用 手机端 APK **禁止在手机任何存储分区创建临时文件**。所有数据(APK 和数据文件)直接通过内存缓冲区 → Socket 转发至 PC **P0(红线)** FR-032 流式拉取 PC 端接收数据后直接进入分块加密管道,不写入 PC 临时目录 P0 FR-033 大文件分片传输 超过 50MB 的单一文件(如大型 APK、游戏 OBB),分片读取(每片 1MB) P0 FR-034 数据扫描 扫描手机数据源,生成待备份文件/记录列表 P0 FR-035 数据分块 大文件按 4MB 分块,计算 SHA-256 指纹 P0 FR-036 数据压缩 对应用数据中的文本、JSON 等使用 Zstandard 压缩 P1 FR-037 数据加密 启用加密时,对分块进行 AES-256-GCM 加密 P0 FR-038 去重 相同内容块(包括 APK 文件块)只存储一次 P1 FR-039 传输校验 每个分块传输后校验哈希 P0 FR-040 断点续传 支持网络中断后从断点继续备份 P0 FR-041 失败重试 单块失败自动重试 3 次 P0 FR-042 并行传输 支持多线程并行上传,默认 2 个并发 P1 FR-043 备份进度 显示总体进度、当前数据源、文件数、大小、速度、剩余时间;**应用列表级别的进度**(如“已完成 15/30 个应用”) P0 FR-044 暂停/取消 备份过程中可暂停,取消后保留已备份分块 P0 FR-045 后台备份 支持最小化到系统托盘运行 P0 FR-046 备份日志 记录每次备份的开始、结束、成功/失败/跳过数量、错误详情;**对每个应用记录其备份粒度及结果** P0 FR-047 异常处理 对设备断开、ADB 错误、Shizuku 未激活、存储不可达等给出明确提示 P0 FR-048 定时自动备份 支持每日/每周定时备份(可分别设置 APK 和数据备份策略) P1 FR-049 **存储耗尽救援** **即使手机剩余空间低于 100MB,仍可正常启动备份**(不依赖手机磁盘缓存) **P0** FR-050 **部分失败容忍** 若某个应用的“APK+数据”因 Shizuku 未激活失败,但 APK 备份成功,则该应用在日志中标记为“部分成功”,并继续执行其他应用,**不阻断整个备份流程** **P0** *** ### **5.5 恢复执行引擎(重点修改,支持粒度控制)** **编号** **功能** **需求描述** **优先级** FR-051 快照浏览 用户可浏览某设备下所有历史快照 P0 FR-052 内容浏览 在快照内查看联系人列表、短信会话、**应用列表及每个应用的备份内容(仅 APK / APK+数据)** P0 FR-053 **应用恢复粒度选择** 在恢复应用时,用户可**针对每个应用独立选择**恢复粒度:\ ① **跳过**(不恢复该应用)\ ② **仅恢复 APK**(仅安装应用,不恢复数据)\ ③ **恢复 APK + 数据**(先安装 APK,再恢复数据)\ ④ **仅恢复数据**(要求手机上已安装该应用,直接覆盖数据) **P0(核心)** FR-054 **一键批量恢复设置** 支持一键将所有应用设为“仅恢复 APK”或“恢复 APK+数据”或“仅恢复数据” P0 FR-055 **版本不匹配警告** 当用户选择“恢复数据”时,若备份的 APK 版本(`versionCode`)与手机当前安装的版本不一致,弹出明确警告:“数据可能不兼容,是否继续?” **P0** FR-056 **跨设备风险警告** 当用户尝试将应用数据恢复到**不同品牌或不同 Android 大版本**的手机时,红色弹窗警告 P0 FR-057 全量恢复 一键恢复快照中所有数据到当前手机 P0 FR-058 冲突处理(APK 安装冲突) 目标手机已安装同名 APK 时,提供:跳过 / 覆盖安装(降级需系统允许)/ 每次询问 P0 FR-059 冲突处理(数据冲突) 目标手机已有应用数据时,提供:跳过 / 覆盖 / 重命名(仅对文件类数据) P0 FR-060 恢复预检 检查目标手机连接、存储空间、系统版本兼容性、Shizuku 状态(若恢复数据) P0 FR-061 恢复后校验 恢复完成后校验文件/记录数量,生成恢复报告 P0 FR-062 短信恢复引导 恢复短信需引导用户设置本软件为默认短信应用 P0 FR-063 应用数据恢复 根据备份时的粒度,调用 Shizuku 执行对应恢复操作 P0 FR-064 恢复进度 显示恢复进度、速度、剩余时间;**应用级别进度**(如“已完成 10/20 个应用的数据恢复”) P0 FR-065 恢复日志 记录每个应用恢复的粒度、结果(成功/失败/跳过) P0 FR-066 导入备份恢复 支持从本地 zip 或远程备份库直接恢复 P1 *** ### **5.6 备份导入与导出** (FR-067 \~ FR-070 同 v3.1,略) *** ### **5.7 安全与隐私** (FR-071 \~ FR-078 同 v3.1,略) *** ### **5.8 通知与报告** (FR-079 \~ FR-082 同 v3.1,略) ## **6. 非功能需求** ### **6.1 性能** (指标同 v3.1,新增应用数据预扫描性能) **指标** **要求** 应用数据预扫描(100 个应用) ≤ 10 秒(手机端仅读取目录大小,不遍历深层文件) 100 个 APK 备份(平均 50MB) ≤ 5 分钟(USB 3.0 下) 应用数据备份速度 ≥ 50 MB/s(Shizuku 流式传输) **备份期间手机磁盘写入量** **严格为 0 字节**(零落地) 其余指标同 v3.1。 ### **6.2 可靠性** (同 v3.1) ### **6.3 兼容性** (同 v3.1) ### **6.4 安全性** (同 v3.1) ### **6.5 易用性** (同 v3.1,新增应用列表 UX 优化) - 应用列表支持**按名称、包名、大小、上次备份时间排序**。 - 支持**多选应用**后批量修改备份粒度。 - 支持**保存用户偏好**(如将某些应用固定设为“APK+数据”,下次备份时自动沿用)。 ### **6.6 可维护性** (同 v3.1) ## **7. 技术方案建议** ### **7.1 开发语言与框架** (同 v3.1) ### **7.2 手机端技术组件** (同 v3.1) ### **7.3 PC 端模块划分** (在 `backup` 和 `restore` 模块下新增子模块) text ``` app ├── backup │ ├── engine │ ├── snapshot │ ├── dedup │ ├── incremental │ └── app_granularity_controller # 新增:应用粒度控制器 │ ├── APKOnlyExecutor # 仅备份 APK │ └── FullAppExecutor # 备份 APK + 数据 ├── restore │ ├── engine │ ├── conflict │ ├── verify │ └── app_restore_controller # 新增:应用恢复粒度控制器 │ ├── APKOnlyRestorer │ ├── DataOnlyRestorer # 仅恢复数据(目标手机已有该应用) │ └── FullAppRestorer # APK + 数据全恢复 └── ... ``` ### **7.4 通信协议设计** (同 v3.1,新增指令) protobuf ``` enum BackupGranularity { SKIP = 0; APK_ONLY = 1; APK_AND_DATA = 2; } message AppBackupRequest { string package_name = 1; BackupGranularity granularity = 2; int64 version_code = 3; // 用于增量判断 } ``` ### **7.5 备份库目录结构** (同 v3.1,在 `manifest.json` 中记录每个应用的备份粒度) json ``` { "snapshot_id": "20260824_120000", "apps": { "com.example.game": { "apk_backed_up": true, "apk_version": 105, "apk_size": 52428800, "data_backed_up": true, "data_size": 204800000, "backup_granularity": "APK_AND_DATA" }, "com.example.tool": { "apk_backed_up": true, "apk_version": 12, "apk_size": 5242880, "data_backed_up": false, "data_size": 0, "backup_granularity": "APK_ONLY" } } } ``` ### **7.6 备份流程(含粒度控制)** text ``` 1. 用户选择设备,进入“应用备份”页面 2. 手机端 APK 预扫描已安装应用列表,并返回每个应用的 APK 大小和数据大小 3. PC 端 UI 展示应用列表,用户逐个或批量设置备份粒度(不备份 / 仅 APK / APK+数据) 4. 用户点击“开始备份” 5. PC 端遍历应用列表: a. 若为“仅 APK”:执行 APK 提取器 → 流式传输 → 分块加密 → 存储 b. 若为“APK+数据”:执行 APK 提取器(流式)+ 数据执行器(Shizuku 流式)→ 分块加密 → 存储 c. 若 Shizuku 不可用但用户选了“APK+数据”:记录该应用失败,继续处理下一个(部分容忍) 6. 更新 manifest.json,记录每个应用的备份粒度、版本、大小 7. 完成通知 ``` ## **8. UI/UX 需求** ### **8.1 应用备份/恢复页面设计(核心 UI)** - **应用列表页**(备份或恢复时共用类似布局): - 顶部工具栏:全选 / 取消全选 / 全部设为仅 APK / 全部设为 APK+数据 / 搜索框 / 筛选器 - 表头:□ 勾选框 | 图标 | 应用名 | 版本 | APK大小 | 数据大小 | **备份粒度(下拉选择)** | 状态 - 底部汇总栏:显示“已选 X 个应用,其中仅 APK:Y 个,APK+数据:Z 个,预计总大小:XXX MB/GB” - **恢复页面额外列**: - 当前手机版本 vs 备份版本(差异高亮) - **恢复粒度下拉框**:跳过 / 仅恢复 APK / 仅恢复数据 / 恢复 APK+数据 ### **8.2 交互反馈** - 当用户在备份页选择“APK+数据”但手机未激活 Shizuku 时,行背景变为浅黄色,并显示 ⚠️ 图标,悬停提示“需要 Shizuku”。 - 当用户在恢复页选择“恢复数据”但备份版本与当前版本不一致时,红色高亮警告。 ## **9. 测试与验收** (同 v3.1,新增应用粒度测试用例) **测试用例** **预期结果** 备份 A 应用选“仅 APK”,B 应用选“APK+数据” A 仅备份 APK,B 备份 APK+数据,manifest 记录正确 恢复时 A 选“仅恢复 APK”,B 选“恢复 APK+数据” A 仅安装 APK,B 安装 APK 并恢复数据 恢复时 C 选“仅恢复数据”,但手机未安装 C 提示“请先安装该应用”,并阻止操作 Shizuku 未激活时,选择“APK+数据”备份 APK 备份成功,数据备份失败,日志标记“部分成功”,流程继续 ## **10. 风险与限制** (同 v3.1,新增应用相关风险) **风险/限制** **说明** **应对方案** **应用数据版本不兼容** 备份的 APK 版本与目标手机当前版本不一致 恢复前强制对比 versionCode,弹窗警告并让用户确认 **Android Keystore 硬件绑定** 跨品牌恢复应用数据可能闪退 UI 强警告,默认“仅恢复 APK”优先于“恢复数据” **Shizuku 依赖** 应用数据备份需用户自行安装激活 Shizuku 提供详细图文/视频教程 **部分应用禁止备份** 某些银行/金融应用禁用 `allowBackup=false` 在列表中标记“不支持数据备份”,自动降级为“仅 APK” ## **11. MVP 功能优先级** ### **P0:必须完成** - USB 设备连接 + 手机端 APK 自动部署 - 联系人、短信、通话记录、照片/视频备份与恢复 - **应用列表展示(含图标、版本、大小)** - **应用粒度选择(不备份 / 仅 APK / APK+数据)** - **应用批量设置(全选 / 全部仅 APK / 全部 APK+数据)** - **应用数据预扫描(显示大小)** - **Shizuku 状态检测与引导** - **APK 流式备份与恢复(零落地)** - **应用数据流式备份与恢复(Shizuku)** - **恢复粒度选择(跳过 / 仅 APK / 仅数据 / APK+数据)** - **版本不匹配警告(恢复数据时)** - 本地目录存储 + 端到端加密 - 备份/恢复进度 + 日志 - 存储耗尽救援(< 100MB 仍可备份) ### **P1:强烈建议** - Wi-Fi 连接、自动备份计划、增量备份、去重 - SMB/WebDAV 存储、多设备管理 - 日志导出、应用搜索/筛选 ### **P2:后续迭代** - SFTP、系统设置备份、报告导出 ## **12. 里程碑计划** (同 v3.1,约 16 周) ## **13. 遗漏项补充说明(这一节就是您问的“是否有遗漏”的答案)** 经全面检查,相较于 v3.1 及您的最新要求,以下内容已在本 v4.0 中补充完整,确保无遗漏: **遗漏项** **补充位置** **补充内容** **① 应用“仅恢复数据”场景** FR-053 第④项 恢复时新增“仅恢复数据”选项(要求手机已安装该应用),覆盖“应用已装,只需覆盖存档”的场景 **② 应用数据版本不匹配警告** FR-055 恢复数据时必须对比备份 APK 版本与当前手机安装版本,不一致则强警告,这是许多备份工具(含小米助手)的盲区 **③ 部分应用不支持数据备份(allowBackup=false)** 第 10 章风险表 补充标注并自动降级,避免用户误以为软件故障 **④ 应用数据预扫描性能** 6.1 性能指标 明确了 100 个应用预扫描 ≤ 10 秒,防止 UI 卡顿 **⑤ 应用列表级别的进度展示** FR-043 / FR-064 备份/恢复时不仅要显示总进度,还要显示“已完成 X/Y 个应用”,提升用户掌控感 **⑥ “仅备份 APK”时的增量逻辑** FR-029 明确指出 APK 增量依据 `versionCode` 变化,而非文件修改时间 **⑦ 部分失败容忍机制** FR-050 某应用数据备份失败(如 Shizuku 未激活)不阻断其他应用备份,确保“能备尽备” **⑧ 用户偏好保存** 6.5 易用性 补充:保存用户对每个应用设定的备份粒度偏好,下次自动沿用 **⑨ 跨设备恢复应用数据时警告品牌差异** FR-056 补充了“不同品牌”间的强警告,因为 Android Keystore 签名差异是导致闪退的主因 **⑩ 应用列表恢复时当前版本对比显示** 8.1 UI 设计 恢复页面增加“当前手机版本 vs 备份版本”列,辅助用户决策 *** **结论**:本 v4.0 PRD 已覆盖从**备份粒度选择**到**恢复粒度选择**的全链路,补全了版本冲突、部分失败容忍、仅恢复数据等常见但易遗漏的场景。请评审后即可进入详细设计阶段