Skip to content

feat(harmonyos): 增加 HAP 外壳与 PWA 支持 - #42

Open
zilorn wants to merge 2 commits into
mainfrom
codex/harmonyos-support
Open

zilorn wants to merge 2 commits into
mainfrom
codex/harmonyos-support

Conversation

@zilorn

@zilorn zilorn commented Oct 31, 2026

Copy link
Copy Markdown
Owner

解决的问题 / Problem

ReaderX 目前只发布 Android、Linux 和 Windows 原生包,HarmonyOS 没有可用的稳定 Tauri target:官方 feat/open-harmony 分支仍依赖未发布的 cargo-mobile2 / openharmony-ability 等第三方依赖,本地 Tauri CLI 也没有 ohos 子命令。

本 PR 在不新增第三方包的前提下,为 HarmonyOS 提供两条可运行路径:

  • 原生 HAP 外壳,使用 ArkTS + ArkWeb,把前端资源打进安装包;
  • 可安装 PWA,供 HarmonyOS 浏览器直接安装到桌面。

改动后的行为 / Resulting behavior

  • 新增 harmonyos/ Stage 模型工程,无 oh-package 依赖;ArkWeb 加载固定的 https://readerx.local/,通过 onInterceptRequest 映射到 rawfile/www/,避开 resource:// 的跨域限制。
  • HAP 内使用 hash 路由;系统返回键先交给 WebView 历史;PWA Service Worker 在 HAP 内主动跳过。
  • 新增 pnpm build:hap:以 base=./ 构建前端并复制到 HAP rawfile,同时生成 PWA / HAP 图标。
  • 新增 IndexedDB 存储层,Web / HAP 下持久化偏好、书籍、书签、注释、书源和译文;Tauri 仍走 Rust 后端。
  • 新增 PWA manifest、Service Worker、安装事件与「安装到桌面」入口。
  • 图标由 scripts/pwa-icons.mjs 在 dev / build 时用 Node 内置模块绘制,不提交二进制文件。
  • 文档、README 与项目 skill 已同步更新。

HarmonyOS 版本仍受 WebView 外壳限制:书源 JS 执行、MOBI 解析、PDF 页面图回退、局域网同步、ZIP 备份和原生 TTS 不可用,入口沿用现有降级提示。

截图:当前环境没有 HarmonyOS 设备 / 模拟器,未提供真机截图;图标生成结果已在本地检查尺寸与 PNG 编码。

验证 / Validation

  • 类型检查 / Type check: pnpm exec tsc --noEmit 通过。
  • 文案检查 / i18n check: pnpm run i18n:check 通过。
  • 前端构建 / Frontend build: pnpm run build 通过。
  • HAP 资源构建 / HAP asset build: pnpm run build:hap 通过,产物位于 harmonyos/entry/src/main/resources/rawfile/www/。
  • Rust 测试(如适用)/ Rust tests: 未涉及 Rust 改动,未执行。
  • 手动验证 / Manual verification:
    • HAP HTML 的资源引用全部为相对路径,13 个入口引用均存在;
    • HAP JSON / JSON5 工程文件解析通过;
    • webStore 的内存降级脚本覆盖偏好、书架、书籍、章节、书签、译文与书源;
    • 生成的 192 / 512 / maskable 图标均为有效 PNG。
    • 未在 HarmonyOS 真机安装 HAP,未验证 ArkWeb 下 IndexedDB 持久化;未在 HarmonyOS 浏览器验证 PWA 安装与离线。

数据与兼容性 / Data and compatibility

  • Web / HAP 使用新的 IndexedDB 数据库 readerx(version 1),与 Tauri 的 Rust 数据目录相互独立,不迁移既有原生数据。
  • 清除站点 / 应用数据或卸载应用会删除 IndexedDB 书库;重要书籍需保留原始文件,整库备份仍使用 Android / 桌面版。
  • 不修改现有 Tauri 数据格式、备份格式或同步协议。
  • 未新增 npm / Cargo / oh-package 依赖。
  • HAP 版本号与根 package.json 当前均为 0.7.0;发布新版本时需同步修改 AppScope/app.json5 的 versionName / versionCode。

提交前检查 / Checklist

  • 已阅读 CONTRIBUTING.md 与 AGENTS.md / I read CONTRIBUTING.md and AGENTS.md.
  • 仅包含本次任务相关文件 / Changes are limited to this task.
  • 已更新相关文档与中英文文案(如适用)/ Relevant docs and both locales are updated where applicable.
  • 已完成适用检查,并说明未验证的部分 / Applicable checks are complete and unverified parts are explained.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant