iOS / Android 功能对照表与补全清单(2026-10-25 更新,原版 2026-10-14)
本表以 Android 的产品入口(设置页与各功能模块)为基准逐项核对 iOS。“已有”指 iOS 有可用的产品入口,并有对应 测试或截图证据;共享模块存在、framework 能链接或计划里写了“完成”,都不能单独算作 iOS 已有。 不照搬 Android:Android 本身不合理的地方,在补 iOS 时一并修正(必要时三端一起改),并在“Android 侧问题”一栏记录。 平台不适用的能力(APK/DEX 安装、WorkManager、APK OTA、Discord RPC、Android 桌面布局定制)按等价的用户能力衡量, 或明确标为不适用。
状态:✅ 已有 🟡 部分 ❌ 缺失 ➖ 不适用 / 暂缓
一、功能对照
| 领域 | 功能 | Android | iOS | 状态 | 备注 / Android 侧问题 |
|---|---|---|---|---|---|
| 作品库 | 收藏分类、排序、置顶、批量操作 | 有 | 多分类、拖拽排序、可见性、批量换源/迁移/缺失来源恢复 | ✅ | |
| 作品库 | 历史、书签、续读、阅读记录页 | 有 | 有(记录页、继续阅读附件) | ✅ | |
| 作品库 | 作品库筛选(标签/进度/状态等) | 有 | 阅读进度/下载/快捷/出版状态/来源/标签(共享 ShelfFilter,§214) | ✅ | Windows 问题:“在读”上限是 1 而“读完”是 0.999,99.95% 的作品同时属于两组;迁移到共享规则时修正 |
| 浏览 | 多生态来源、排序/置顶/开关、语言/类型筛选 | 有 | 有 | ✅ | |
| 浏览 | 单源/全局搜索、原生 FilterList | 有 | 有 | ✅ | |
| 浏览 | 命名保存筛选 | SavedFiltersRepository | 筛选面板保存/载入/重命名/删除,可设打开来源时自动应用(§211) | ✅ | Android 以 name.hashCode() 作 id,不同名字可能互相覆盖;iOS 以完整名称为键 |
| 浏览 | 详情页相关推荐 | 有 | 有(§125) | ✅ | |
| 浏览 | 全局标签黑名单 | 有 | 有(§207) | ✅ | Android 静默隐藏书架作品,iOS 显示“已隐藏 N 部”;是否回补两端待定 |
| 浏览 | 敏感类别高亮 | 有 | 有(§207) | ✅ | |
| 成人内容 | 18+ 无痕阅读(全局 + 三态) | 有 | 有(§208) | ✅ | Android 在阅读器内询问,打开时那次保存可能已写入;iOS/Windows 在打开前询问 |
| 成人内容 | 分目标过滤(来源/收藏/历史/订阅/更新/推荐/书签) | 7 个开关 | 来源开关 + 作品库/阅读记录/更新记录/推荐/笔记与书签 5 个目标,Android 同键(§211) | ✅ | |
| 推荐 | 为你推荐、标签/来源偏好 | 有 | 有,打开时按 6 小时缓存刷新 | ✅ | 不做后台推荐:iOS 后台时间留给收藏更新检测 |
| 漫画阅读 | 五种模式、跨章、缩放、分块、书签、下载 | 有 | 有 | ✅ | 详见漫画阅读器专项审计 |
| 漫画阅读 | 保存/分享页面 | 有 | 保存 PNG、系统分享 | ✅ | |
| 漫画阅读 | 裁切批注 → 笔记 | 存入 media_notes,笔记总览/导出 | 裁切存为笔记(可附想法)或导出图片;设置 → 笔记(§211) | ✅ | Android 已改:总览计数改用共享 summarizeBookNotes,去掉逐作品线性查找 |
| 漫画阅读 | OCR + 翻译 | ML Kit/Paddle/ONNX + 翻译 API | Vision + 系统 Translation,译文画回原位(§209) | ✅ | 真机翻译待验;竖排日文只做了横排重排 |
| 小说阅读 | 分页/滚动、样式、目录、书签、下载 | 有 | 有 | ✅ | |
| 小说阅读 | 章节翻译(仅译文/双语) | 翻译 API / 端到端 | 系统 Translation(§206) | ✅ | 真机待验 |
| 小说阅读 | 朗读 TTS | 有 | AVSpeechSynthesizer 逐段朗读、位置跟随、自动跨章、语速/声音、锁屏/控制中心播放控制(§210、§215) | ✅ | Android 已修:Tokenizer 写死的 Azure 角色音色会代入任意 HTTP 朗读源的 ,且每段重置角色→音色映射(§210) |
| 小说阅读 | 正文内搜索 | 有 | 搜索本章并跳转,含译文(§210) | ✅ | |
| 小说阅读 | 替换规则 | 有(规则引擎已下沉共享,§166) | 规则页 + 正文/章节标题应用;存储层与 Windows 共用 core-library 的 ReplaceRuleStore(§210) | ✅ | |
| 小说阅读 | 划线批注(novel_markings) | 选中文字划线/写想法,进笔记总览 | 分页选中菜单“划线”、更多面板“划线当前段”、笔记页列出并可写想法(§212–213) | ✅ | Android 问题:高亮只在原偏移所在块内重新定位,文字移到别的块后高亮消失(待改,需 Android 真机核对) |
| 小说阅读 | 查词(词典) | 内置网页词典 + 规则 | 系统“查询”(选中文字的菜单,分页 UITextView 与滚动可选文本都有) | ✅ | 用系统词典,不移植网页词典 |
| 视频 | 线路/倍速/续播/音轨/字幕/外挂字幕/PiP/AirPlay | 有 | 有 | ✅ | |
| 视频 | 视频下载与离线播放 | 有 | 有(eb84875f3) | ✅ | |
| 视频 | 时间点笔记 | media_notes | 播放器“记笔记”,保存时间点、可截帧(§211) | ✅ | HLS 等流媒体取不到帧,只存时间点 |
| 视频 | 弹幕 | 有 | 不做 | ➖ | 按要求不考虑。附注:Android 的哔哩哔哩/腾讯弹幕仓库从未被调用,两个开关只过滤弹弹play 转发的评论;/api/v2/bangumi/{id} 的分集列表疑似嵌套在 bangumi 下而 Android 从顶层读取(未用真实凭据核实) |
| 视频 | 画质增强(Anime4K/NCNN) | 有 | 无 | ❌ | 低优先,iOS 需 Metal 实现(#15) |
| 视频 | 投屏 | DLNA | AirPlay | ➖ | iOS 的投屏规范是 AirPlay;DLNA 发现需要 Apple 审批的多播网络权限 |
| 本地 | CBZ/ZIP、EPUB/TXT、单视频文件 | 有 | 有 | ✅ | |
| 本地 | 视频目录/播放列表、PDF/CBR/7z | 有 | PDF(§214)、视频文件夹(一集一文件,共享 core-local,§215) | ✅ | CBR/7z 需要第三方解压库(RAR 许可受限),iOS 无系统支持,暂不引入 |
| 下载 | 队列、暂停/继续/重试、存储管理 | 有 | 有(前台) | ✅ | |
| 下载 | 下载设置(并发/限速/重试/蜂窝网络) | 有(规则已共享,§168) | 请求间隔、每页尝试次数、重试间隔(共享 DownloadPolicy,§211) | ✅ | 不提供线程数/同时作品数:iOS 有意逐页下载以控制 JVM 内存 |
| 下载 | 系统后台传输 | WorkManager | 前台队列,回到后台暂停 | ➖ | iOS 后台传输只接管普通 URL 请求;页面经进程内扩展运行时获取,无法交给系统 |
| 更新 | 收藏更新检测 | 后台调度 + 通知 | 前台/手动 + 后台 app refresh(系统决定时机)+ 新章节本地通知(§212) | ✅ | iOS 不保证运行频率;冷启动的后台唤醒没有扩展运行时,只排下一次 |
| 更新 | 扩展更新提示 | 有 | 有(重复提示已合并,§206) | ✅ | |
| 备份 | Kototoro/Mihon/Aniyomi/Venera 备份导入导出 | 有 | 有 | ✅ | |
| 备份 | 定期自动备份 | 有 | WebDAV 自动备份(回到前台时按间隔判断,§211) | ✅ | |
| 同步 | Google Drive | 有 | 有 | ✅ | |
| 同步 | WebDAV | 有(客户端已在 core-net 共享) | 测试连接、上传/保留、云端列表、下载合并恢复,编排层共享到 core-library(§211) | ✅ | iOS 密码存钥匙串(Android 存普通偏好);Windows 迁移到共享层待 Windows 构建 |
| 网络 | 代理 | 有 | 使用系统代理/VPN | ➖ | 应用内代理无法作用于 AVPlayer 等系统组件,只会是半套;iOS 上通常用系统级代理 |
| 网络 | GitHub 镜像与测速 | 有(目录已共享,§161–162) | 扩展安装包下载走所选镜像,并行测速(§212) | ✅ | 与 Windows 同规则:仓库索引与 api.github.com 不改写 |
| 空间 | 内置漫画/小说/动漫空间 | 有 | 有 | ✅ | |
| 空间 | 自定义空间 | 有 | 创建/编辑/停用/删除,切换面板中出现;按类型、来源语言、来源类型限定(共享 CustomSpace 规则与表,§213) | ✅ | iOS 一个空间对应一种媒体类型用于页面筛选;多类型空间显示全部类型再按来源规则限定 |
| 追踪 | 七站授权/绑定/同步、追踪发现 | 有 | 有,真实账号待验 | 🟡 | 见追踪专项记录 |
| 统计 | 阅读统计、单作品统计 | 有 | 有 | ✅ | |
| 统计 | 剩余阅读时间估计 | 有 | 详情页“剩余约 …”(共享 ReadingTimeEstimate,§213) | ✅ | Android 已改:原先对小说、视频也按“每章 20 页”估算,现在只给漫画类作品 |
| 安全 | 应用锁 | 应用密码 | 面容/触控 ID 或设备密码;启动与回到前台时锁定,多任务界面遮盖(§212) | ✅ | Android 已修:应用密码原为无盐 MD5,改为加盐 PBKDF2-SHA256,旧值首次解锁时升级(§212) |
| 系统 | 桌面小组件 | 最近/书架 | WidgetKit“继续阅读”:桌面小/中尺寸 + 锁屏矩形/圆形/单行,每部作品深链打开(§215) | ✅ | 按 HIG:系统材质、着色模式、无历史时显示示例 |
| 系统 | 外观(主题/强调色/背景图) | 大量自定义 | 跟随系统 | ➖ | iOS 遵循系统外观,不做逐项移植 |
| 系统 | 主导航配置、Discord RPC、APK 更新 | 有 | — | ➖ | 平台不适用 |
| 扩展 | Mihon/Aniyomi/Tsundoku/JAR、CMS/TVBox | 有 | 有 | ✅ | |
| 扩展 | LNReader/Legado/Cloudstream/TVBox spider | 有 | 无 | ❌ | 需要原生 JS runtime,大项 |
二、补全顺序
按“用户价值 / 实现成本 / 能否在模拟器验收”排序,每项完成后更新上表状态并在 KMP 主方案追加小节。
| # | 补全项 | 做法与验收 | 状态 |
|---|---|---|---|
| 1 | 漫画 OCR 翻译 | Vision 识别文字块 → Translation 翻译 → 覆盖在页面原位;模拟器用测试翻译器验证排版 | ✅ §209 |
| 2 | 小说 TTS | AVSpeechSynthesizer,播放/暂停/跨章、跟随高亮段落、语速与音色 | ✅ §210 |
| 3 | 小说正文内搜索 | 在当前章节内搜索并跳转,两种阅读模式都定位 | ✅ §210 |
| 4 | 小说替换规则 | 复用 §166 共享规则引擎,规则页 + 阅读时应用 | ✅ §210 |
| 5 | 批注笔记 | 漫画裁切、视频时间点写入共享 media_notes,笔记总览 | ✅ §211 |
| 6 | 命名保存筛选 | 按来源保存/恢复 FilterList | ✅ §211 |
| 7 | 后台更新检测与通知 | BGAppRefreshTask 尽力调度 + 本地通知;不承诺固定频率 | ✅ §212 |
| 8 | 成人内容分目标过滤 | 对齐 Android 的过滤目标 | ✅ §211 |
| 9 | 下载设置 | 复用 §168 共享限速/重试规则 | ✅ §211 |
| 10 | WebDAV 同步与定期备份 | 复用 core-net WebDavBackupClient | ✅ §211 |
| 11 | 代理与 GitHub 镜像 | 复用共享镜像目录;代理作用于 URLSession 与 Ktor | ✅ 镜像 §212;代理判定为不适用 |
| 12 | 查词 | 系统词典 UIReferenceLibraryViewController | ✅ 系统选中菜单已提供 |
| 13 | 自定义空间 | 类型/语言/来源规则与独立导航 | ✅ §213(独立导航状态未做) |
| 14 | 弹幕 | 复用 Android 弹幕数据源 | ➖ 不做 |
| 15 | 视频增强 / DLNA | 低优先 | DLNA ➖(AirPlay);画质增强待做(需 Metal 实现) |
| 16 | 应用锁 | LocalAuthentication | ✅ §212 |
| 17 | 小组件、阅读时间估计、本地格式扩展 | 低优先 | ✅ §213–215(CBR/7z 不做) |
| 18 | 小说划线批注 | 共享 novel_markings 表;选中文字划线、写想法、进入笔记总览 | ✅ §213 |
多设备同步之外需要账号或真机的部分(追踪真实账号、真机翻译、真机 JVM)先完成可本地验证的实现,再明确所需外部条件。
历史记录(2026-10-14 版的实施证据)
本轮实现边界
本地视频使用 Android 同名 LOCAL_VIDEO 和 VIDEO 内容类型;共享层复制并流式校验文件, 输出沙盒内 file:// 媒体地址,播放仍交给原 AVPlayer,收藏、历史、继续播放仍交给原共享库。 支持的单文件扩展名包括 MP4/M4V/MOV/MKV/TS/WebM/AVI,能否导入取决于系统实际检测的容器和编码, 不宣称所有 MKV/AVI 均可播放。AVFoundation 的本地 URL 资源与异步可播放属性依据 Apple AVURLAsset 文档。
重导入按文件名、长度和流式 SHA-256 核对已有副本;同一文件保留作品/章节 ID,旧版导入记录也适用。 同名同长度但字节不同的文件另建作品,失败不删除旧副本。没有新增依赖、schema 或另一套视频/历史模型。 单个 M3U8 不能保证其分片随之复制,当前明确拒绝,目录/播放列表资源包仍在待补范围。
SwiftUI 最终定向验收 4 项,0 失败,日志为 iosApp/build/local-video-ui-final.log:
- 损坏 MP4 在媒体校验阶段拒绝,不出现在本地视频列表;
- H.264/AAC MP4 经系统文件选择器导入,实际播放/拖动进度,重启后再次选择同一文件,继续播放恢复原位置;
- 原 CBZ 漫画导入/显示与 GB18030 TXT 分章/正文阅读回归。
已实际检查播放画面、重启续播与损坏文件拒绝的截图,保存在 iosApp/build/local-video-attachments/。首轮 TXT 用例选择到了文本预览,视频重启后文件选择器准备等待失败; 辅助方法已限定文档提供者中的可选择 Cell、处理旧选择并等待选择器关闭,四项重跑全部通过。 中断前未完成的首次测试没有计入通过数量。
共享层最终 13 项 JVM + 59 项 iOS Native 测试,0 失败/错误/跳过; compileKotlinIosArm64 同轮通过,日志为 iosApp/build/local-video-native-final.log。 Native 增量验证收藏、历史及播放秒数在数据库重开/重复导入后保留;JVM 增量验证复制/重开/删除、 同名同长度内容冲突、导入失败保留旧文件、空视频及单独播放列表拒绝。以上不代表真机播放验收。 真实扩展预览再次构建通过(local-video-real-preview-build.log),已安装并启动于专用模拟器; 工程原有真机 JVM/启动配置保留,本轮模拟器原生测试通过命令行覆盖构建参数。 文档站点检查 local-video-docs-final.log 仍被 149 个既有失效源码链接阻断,位于漫画/小说专项审计 和 KMP 主方案;本轮新增清单没有失效链接。没有关闭链接校验或把该结果记为构建成功。
下载/缓存存储管理增量
设置和下载队列均可进入原生“存储管理”。界面分开统计离线章节、页面/封面缓存、来源图标和扩展图标; 按作品/章节删除整章文件,清缓存保留离线文件。统计使用逻辑文件字节数,未包含库数据库、本地导入媒体、 HTTP 缓存、运行时或应用安装包,不宣称是系统显示的全部应用占用。
下载开始前保存 download.json,沿用既有目录哈希与完整字符串 ID,不修改 schema 或新增依赖。 移除队列记录后,名称和离线文件仍可管理;旧目录优先利用仍存在的队列信息,无信息时显示日期/占用。 清理不会删除原漫画/小说/视频导入、收藏或阅读进度。漫画的离线提示改为依据文件状态, 避免队列记录移除后漏显“可离线阅读”。小说原有文件状态判断保留。
当前阅读窗口中的章节不能删除;缓存清理在阅读器打开时禁用。实际下载 worker、图片请求和解码持有 文件使用权,即使队列记录被移除或 JNI 请求取消,也要等请求真正结束才能清理。 清理开始后新图片请求等待,取消等待不会泄漏使用计数。
整章删除先写日志并移入同目录暂存区,然后持久化队列删除,再提交文件清理。 队列写入或提交失败恢复原目录;重启恢复未提交删除。已提交删除的残留只重试清理,不复活章节; 界面显示待释放字节和失败原因,可重试释放空间。恢复异常会阻止下载 worker 启动,避免覆盖待恢复文件。 路径和日志身份均校验,扫描/缓存清理不跟随符号链接。
默认缓存上限 512 MiB,可选择 256/512/1024/2048 MiB 或不限,偏好重启保留。 按修改时间清理较旧缓存,运行于文件空闲时;阅读和下载期间可暂时超过该软预算。 视频离线下载、系统后台传输及真机磁盘压力验证仍未完成。
默认原生最终定向测试 27 项,0 失败,xcodebuild test 正常成功退出,日志 iosApp/build/storage-verified-tests.log。其中 11 项存储测试验证实际目录/队列、失败回滚、 暂存删除重开恢复、已提交清理失败重试、精确字符串 ID 与小说元数据、取消/迟到请求隔离; 5 项队列、4 项离线清单与 4 项图像请求策略回归通过。 3 项原生 UI 验证清缓存后离线阅读、删除后续读保留、移除任务后重启管理、阅读中保护和容量设置持久化。 确认弹窗的取消/确认均实际执行,截图已检查,位于 iosApp/build/storage-attachments/。 首轮界面失败暴露漫画离线提示依赖队列记录,修复后同一重开路径通过; 旧弹出式确认框无可见取消按钮,已换为明确提供取消操作的原生 alert。
storage-docs-check.log 的站点构建仍被同样 149 个既有源码失效链接阻断,未关闭校验。
真实 JVM 构建编译通过,同轮 24 项文件/队列/请求策略测试通过;真实小说 UI 下载未通过: Tsundoku 当前样本等待正文 90 秒超时(storage-real-novel-final.log), JAR 的 BILINOVEL 样本已显示正文并开始下载,但插图请求超时,队列记录失败且保留正文和 download.json(storage-real-jar-novel.log)。没有把这些用例记为跳过或成功,也未扩大来源兼容声明。 已核对真实未完成小说的元数据、完整字符串 ID 和保留文件;小说插图/元数据的清缓存保留由文件层回归覆盖。
小说阅读控件与边距增量
小说阅读器参考漫画阅读器的原生玻璃控件:顶部只保留返回、章节标题/目录与更多, 底部显示上一章、章节进度与下一章。书签、排版和在线章节下载移到“更多 → 快捷”, 目录、阅读设置和下载队列由同一个弹出层状态管理。本地导入作品仍不显示重复下载操作。 正文中央点击显隐控件;分页正文尺寸不受控件显隐影响,滚动模式也使用悬浮控件。
“更多 → 控件”可配置书签、目录与书签、阅读设置、下载队列四种悬浮按钮,默认只有书签, 允许全部关闭;采用既有小说设置的全局持久化范围。按钮显示在底部进度上方,随阅读控件一起收起。 进度显示把共享历史的万分单位转换为百分比,跳转章节段落仍由共享文档定位,历史格式不变。
按用户选择,上下边距针对正文区域:上方另加挖孔/状态栏避让,下方正文留白与设定值相同, 章节/页码页脚绘制在下边距内。移除原先额外扣除的 24 pt 页脚和“下边距减半”; 滚动模式移除固定 12 pt 及控件高度留白,使用设定的垂直边距。 默认值来自共享 NovelReaderLimits.DEFAULT_MARGIN(36),在 iOS 以逻辑点使用; 小边距下减小页脚字号,防止侵入正文。这里保证的是正文布局区域,末行字形后的空白还受行高/分页剩余空间影响。
默认原生定向 28 项,0 失败(novel-controls-verified.log):24 项文件/队列/图像策略与 原有 TXT 导入、悬浮按钮持久化/操作、分页显隐不改变正文、60 pt 实际布局坐标验收通过。 随后边距用例增加到 60/12 pt,均测量正文区到屏幕下沿、扣除实际安全区后的上沿距离, 并确认页脚位于下方留白且控件显隐不改变正文区(novel-controls-sheet-final.log 中该用例通过)。 四种悬浮按钮的功能、连续打开目录/设置/队列、重启恢复与全部关闭最终用例单独通过 (novel-floating-queue-check.log)。下载队列中的存储入口位于列表下方,回归实际滚动确认可达。 最终截图已导出至 iosApp/build/novel-floating-verified-images/ 与 iosApp/build/novel-margin-verified-images/,实际检查四按钮、配置、全部关闭、下载队列和 60/12 pt 沉浸正文;未完成轮次未计入通过数量。
最终真实 JVM 预览编译及 24 项核心测试,0 失败(novel-controls-real-build-tests.log), 已重新安装并启动于专用模拟器。没有将该构建成功等同于外网小说下载或真机验收。 最新文档站构建仍被 149 个既有失效源码链接阻断(novel-controls-docs-check.log),未关闭校验。