Android / Windows 功能与 Compose 共享对照
更新日期:2026-10-14。以 app、core-ui、desktop-app 当前代码为依据;Android 是迁移基准,存在实现不等于本轮已逐项做真机验收。
判定方式
- 共享:Android 和 Windows 实际调用同一份
core-ui/commonMainCompose。 - 部分共享:已有共同组件,但页面仍包含独立 Windows 布局。
- 独立:Windows 页面另有实现;共享业务规则不算共享 UI。
- 可用 / 部分 / 未接入:描述功能范围,与 UI 共享情况分别记录。
- 平台适配允许保留:数据源、文件访问、窗口、Android 资源/触觉/TV 焦点、图片加载、Media3/libmpv/WebView2 等。迁移优先提取 Android 已有 Compose,平台适配层不复制布局。
对照表
| 功能 | Android 基准 | Windows 代码现状 | Compose 共享 | 后续缺口 / 顺序 |
|---|---|---|---|---|
| 导航、宽窄窗口、主题 | 自适应导航、Material/iOS 风格 | 可用;桌面外壳已全部改用 Material 3(原 M2 桥接已删除),与共享组件同一套颜色/字体/圆角令牌 | 部分共享 | 随页面迁移统一;避免另起主题系统 |
| 作品卡片、来源卡片、浮动预览 | 封面、状态、详情预览 | 可用 | 共享基础组件 | 各页面组装仍待统一 |
| 主页框架与 Hero | 自适应布局、多个 Hero 样式、栏目 | 共享外层布局和标准 Hero;栏目组装仍单独实现 | 部分共享 | P1:提取栏目;对齐其余 Hero 样式 |
| 鼠标、触控与横向拖拽 | 触控滚动、Pager | 历史/推荐/Hero/更新/筛选支持鼠标拖动、惯性与吸附 | 共享手势 | 已完成本轮前置修复;新页面继续接入 |
| 来源浏览、搜索、动态筛选 | 来源分组、搜索、筛选 | 基础浏览、搜索、分页、标准筛选可用;打开某个源时来源栏本身也带内容类型与来源类型筛选,并沿用同一范围过滤作品 | 部分共享 | P2:迁移整个浏览与筛选页面(含共享筛选控件) |
| 界面文案 | 全部取自 app/src/main/res(Weblate) | 共享界面经 UiStrings/LocalUiStrings 按 Android 资源名取词,Windows 用同一份目录导出,无重复翻译 | 共享文案层(core-ui text 包、contentTypeTitle) | Android 界面仍用 stringResource;逐屏迁移时切换到 uiString |
| 订阅更新与推荐 | 更新记录、推荐、追踪设置 | 可用;后台执行与平台调度仍不同 | 部分共享 | 对齐页面组装及剩余设置 |
| 书架与历史 | 查询、筛选、分类、批量操作 | 查询、分类、来源/阅读状态筛选及排序可用;分类可新建/重命名/调序/删除(删除连带该分类的收藏记录,与 Android 一致) | 页面独立,卡片共享;分类增删改查在 core-library | P3:提取页面与筛选;接入批量操作 |
| 详情页信息 | 简介、标签、操作、章节分栏 | 可用;浮动预览及自适应分栏共享;收藏按钮按 Android 语义双向切换(加入/取消收藏);简介下方的信息区(状态/评分/别名/标签)取自同一次详情应答,缺项省略,复制链接按钮把 Android 分享的链接写入系统剪贴板 | 部分共享 | P1:信息正文与操作区仍待提取;标签暂无检索跳转 |
| 漫画阅读器章节目录 | 列表/网格、分支、卷/组、当前章、已读/下载/书签状态 | 已接共享主体;搜索标题/编号/卷号、倒序、网格、分支、分组、定位当前章和鼠标拖动可用 | 目录主体、卡片、筛选轨道及面板共享;控制栏组装留在宿主 | P0 基础目录完成;多选、可折叠组、新章状态和额外来源标签仍待对齐 |
| 详情章节目录 | 与阅读器复用章节布局和卡片 | 已接共享目录主体:分支/分卷/搜索/倒序/网格/定位/批量模式,元数据作为列表首项 | 共享 ChapterDirectoryLayout、卡片与筛选轨道 | 目录控件组装留在宿主;阅读器面板与详情面板共用同一批量命令 |
| 漫画章节批量管理 | 多选、下载、书签、标为当前、删除本地章节 | 详情目录的批量模式:切换选中、按当前筛选全选/清除,批量下载、标为已读(历史落最后一章)、添加/删除章节书签(全部选中章节已书签时按钮翻转为删除)、删除本地下载;单章另有溢出菜单 | 部分共享(SourceLibrary.addChapterBookmark、removeBookmark) | “标为当前”与标为已读在桌面是同一历史写入 |
| 漫画单页/双页/连续阅读 | 翻页、方向、连续滚动、恢复 | 可用;页组、缩放、平移、滚轮、点击区、进度恢复已接入 | 场景/控件大量共享 | 长章节内存预算、剩余格式区域解码、部分 Android 设置待补 |
| 漫画阅读设置 | 布局、显示、颜色、手势、性能 | 共享布局/显示面板;仅暴露引擎已支持的选项 | 部分共享 | 性能与更多设置仍独立;不展示空实现开关 |
| 漫画跨章与预取 | 下一章、自动跨章、失败恢复 | 已有同分支跨章、邻页和下一章预取;失败保留进度 | 规则与场景共享 | 持续做边界回归 |
| 漫画书签 | 缩略图、跳转、管理 | 保存、移除当前书签、跨章及像素位置恢复可用;详情页书签标签以页面缩略图网格展示,可点击跳转、单条删除或全部删除(图片经阅读器图片管线与磁盘索引,400k 像素/1024px 解码上限);章节级书签显示为“章节书签”卡片,缩略图取该章第一页;书签标签可进入多选(“选择书签”,对应 Android 长按),勾选后“删除所选”或全选删除 | 列表与删除经共同 SourceLibrary.removeBookmark,章节书签经共同 addChapterBookmark | 书签多选删除已接 |
| 小说目录、控件、设置 | 分组、搜索、定位、设置 | 可用 | 共享 | 继续复用,不另建 Windows 面板 |
| 小说书签 | 摘要、搜索、删除、正文定位 | 已接入共同面板和定位规则;详情页书签标签用文本卡片(章节、摘要、百分比)跳转与删除 | 共享面板/规则 | 正文变化后的定位仍受文本匹配限制 |
| 小说正文引擎 | 滚动/分页/双页、选择与注释等 | 段落连续滚动与分页阅读均可用:分页按窗口与字号实测段落高度切页,滚轮/PageUp/PageDown/空格/Home/End 翻页、滑条按段落定位、页码显示当前页/总页,模式切换保持当前段落 | 分页切行复用 reader-novel 的 splitNovelPageLineRanges;正文样式与测量共用同一 TextStyle | 双页、分页动画、选择注释与朗读仍待;目录已复用 |
| 视频播放与投屏 | Media3、字幕/音轨/速度/全屏/续播/投屏 | libmpv 对应能力及 DLNA 已有实现 | 播放 UI 仍独立 | 后续共享控制布局;原生播放与硬件需单独实测 |
| 超分与视频增强 | Android 原生模型/渲染后端 | ncnn 图像超分、Anime4K 等已接入原生桥 | 设置部分共享 | 模型/硬件验收不能只用 UI 测试替代 |
| 下载与离线阅读 | 批量下载、队列、存储管理 | 单章暂停/继续/重试/取消、离线阅读及旧元数据回收可用;详情页批量下载(全部/未读/翻译分支/前 N 章)、下载页的章/页/图片占用与批量暂停/继续/重试/移除、已完成章节导出 CBZ(单章与整批)、空闲自动回收未引用块、图片总磁盘预算与手动清理已接 | 页面独立 | P6:共享队列 UI、导出、自动回收与图片预算已完成 |
| 扩展安装/卸载/更新 | 多生态扩展、仓库管理 | 安装、卸载、检查/全部更新、启动自动更新、忘记仓库(只删索引条目、已装扩展保留)已有代码 | 页面独立 | P7:共享管理 UI;仓库删除已接,生态完整性待补;不能沿用 README 旧的“卸载未实现”结论 |
| 源设置与网页验证 | 标准/自定义设置、WebView 验证 | 标准设置;WebView2 Cookie/UA/验证已接入,定制控件有限 | 页面独立 | 共享标准表单;真实网站与定制控件另验收 |
| 备份与恢复 | 图书馆、设置、外部格式等 | 图书馆 ZIP 预览/合并/回滚;部分节及格式未接入 | 页面独立,数据规则部分共享 | 对齐剩余备份节与外部格式 |
| 云同步 | WebDAV、Google Drive、系统同步 | WebDAV 已接:备份页可填服务器/目录/账号、测试连接、上传当前图书馆并按保留数量清理、列远端备份、下载并走本地相同的预览/合并,可设自动备份间隔(应用内计时,按距上次成功上传的间隔决定) | 协议、远端分类/选取/保留规则共享 core-net;XML/日期解析也已共享 | Google Drive 与系统同步仍待;计时仅在应用运行期间有效 |
| OCR、翻译、TTS | 已有 Android 功能与设置 | 尚未完整接入 Windows | 未对齐 | 复用已有 Compose 面板,平台引擎另适配 |
| 空间、界面插件及更多设置 | 已有 Android 页面/导航能力 | 尚未完整接入 | 未对齐 | 分项提取,避免复制整套导航 |
| 应用内更新 | 检查更新、下载、安装 | 更多页可检查发布频道、下载并校验、重启后覆盖安装;自动检查/自动下载/退出时安装可开关;--check-update 供打包脚本与 CI 在镜像内自查版本/频道/布局/发布结果 | 规则独立(desktop-runtime 版本语义/清单/脚本),UI 独立 | 已接 release/nightly 两个仓库与 SHA-256 校验;Authenticode 签名校验、增量更新与镜像/代理仍待 |
| Windows 分发 | 不适用 | EXE/JVM/原生桥便携包可构建 | 平台能力 | 实际 MSI 安装/升级/卸载、签名与发布验收待做 |
当前实施项:P0 漫画阅读器基础目录
已迁移 app/.../details/ui/pager/chapters/compose/ChapterItemCard.kt 和 ChaptersScreen.kt 的 Compose 布局。Android 详情和阅读器继续调用原入口,内部改为共同组件;保留资源解析、触觉、TV 焦点、详情嵌套滚动和滚动条适配。Windows 阅读器移除独立列表,使用同一列表/网格、卡片和筛选轨道,接入既有分支/卷分组规则,补定位当前章、网格切换以及鼠标拖动。面板、标题、标签栏与搜索框也复用共同组件。
定位清除搜索并恢复当前章的分支,默认 null 分支不会被其他选择覆盖。当前章点击仅关闭目录,原阅读场景、页码和历史不变;其他章仍走原控制器加载。目录进度显示当前阅读分支内的序号/总章数。下载标记复用下载存储的章节身份判断,避免标题更新使已下载状态消失。
未命名且编号为 0/未知的章节在空查询时仍完整显示;未知编号不伪装成“第 0 章”。数字格式复用 parser-api 的 formatSimple,标题回退使用 Android 现有资源。标题、编号、小数编号与卷号搜索沿用共同规则。
已满足的门槛:两端调用共同组件;Android 编译通过;共同布局的列表/网格、定位、分组、重复 ID、卡片状态及输入行为有回归;真实 Windows 阅读器入口验证保持原加载、进度、返回和搜索快捷键语义。目标验证覆盖 520/1260 的完整阅读器和 340/960 的共同布局。
本项不代表“整个章节管理已完成”:可折叠组、新章标记和额外来源标签仍待对齐。单章的标为已读/未读与删除本地下载已通过卡片溢出菜单接入(对应 Android 长按菜单);批量模式复用同一批命令,只对当前筛选内的章节生效,章节级书签经 SourceLibrary.addChapterBookmark 写入(pageId 复用章节 id,无阅读位置),删除沿用逐条 removeBookmark。“标为当前”仍与标为已读共用历史写入。未接入的能力不伪装成可用控件。
代码与验证证据
- 主页共享入口:
core-ui/.../home/HomeScreenLayout.kt、HomeHeroPager.kt、HomeHeroCard.kt;AndroidHomeScreen.kt/HomeHeroSection.kt与 WindowsDesktopHomePanel.kt调用。 - 鼠标拖动:
core-ui/.../gestures/MouseDragScroll.kt;MouseDragScrollUiTest、DesktopHomeMouseGesturesTest、SharedHomeScreenTest及真实桌面探针。 - 章节:Android
ChaptersScreenRoot.kt、ChaptersScreen.kt、ChapterItemCard.kt;WindowsDesktopReaderPanels.kt、DesktopTabletChrome.kt;共同规则ChapterGrouping.kt。 - 新共同实现:
ChapterDirectoryLayout.kt、共同ChapterItemCard.kt、ChapterFilterChips;Windows 数据适配DesktopReaderChaptersPanel.kt。SharedChapterDirectoryTest与DesktopMangaDirectoryProbe覆盖真实输入与阅读器入口。 - 小说:共同
NovelChapterDirectoryContent.kt、SharedNovelReaderSearchField和书签面板;WindowsDesktopNovelChaptersPanel.kt为数据/颜色适配。 - 扩展实际状态:
DesktopController.setAutoUpdateExtensions/checkExtensionUpdates/applyUpdates/uninstall、ExtensionsPanel以及DesktopSession.uninstall。 - 下载、备份、视频与其他能力以各自控制器/运行时实现为证据;“已有代码”不自动等于真实网站、硬件或安装验收通过。
- 本轮最终验证:47 个不重复的目标测试通过,0 失败、0 跳过(共同规则 26、桌面 UI/适配 20、Windows 分发 1);Android 编译通过。漫画真实入口的重复运行按 1 个测试计数,宽窄窗口、主题和输入组合在这些测试内部覆盖。这是目标回归集合,不是全仓测试或所有功能均完成。
DesktopChapterPresentationTest覆盖未命名/未知编号、小数编号、卷号、标题搜索与元数据变化后的章节身份;原主页历史拖拽、Hero、小说目录、漫画翻页与宽窄窗口进度回归继续通过。- 新版便携包已构建,并通过移到独立目录后、不依赖开发机运行时的真实原生窗口启动/关闭验证;Windows 实际安装/升级/卸载验收仍是表中独立待办。
迁移原则
按可独立验证的功能逐项推进,优先 Android → core-ui → Windows 的真实复用。共享组件只处理布局、显示及输入;平台控制器继续负责数据和副作用。保留必要插槽而不增加第二套 Windows 布局或通用框架。每项完成后更新本表,注明测试和仍未对齐的范围。