Skip to content

feat(ohos): 同步 2.3.9 并接入上游原生依赖适配 - #45

Closed
tignioj wants to merge 5 commits into
ErBWs:feat-ohosfrom
tignioj:codex/feat-ohos-2.3.9-integration
Closed

tignioj wants to merge 5 commits into
ErBWs:feat-ohosfrom
tignioj:codex/feat-ohos-2.3.9-integration

Conversation

@tignioj

@tignioj tignioj commented Oct 17, 2026 •

Copy link
Copy Markdown

将 feat-ohos 从 Kazumi 2.3.1 同步至上游正式版 2.3.9(规则 API 9),接入已合入上游的 media-kit / ech_http 鸿蒙适配,恢复新版 Native Assets 下的构建与播放支持,并修复平板及展开态设备退出全屏播放后无法恢复竖屏 UI 的问题。

关联 #44。

改动

  • 以本仓库 feat-ohos 的 80eac7aa 为基线,同步上游 2.3.9 标签(025dcb5c)的代码,保留已有鸿蒙工程、正式包名 com.predidit.kazumi、应用名和 ErBWs 更新渠道。整体 diff 包含 2.3.1 → 2.3.9 的业务代码同步。
  • 整理 Flutter-OH 兼容处理,包括版本号编译参数、旧版重排回调及索引调整、菜单 API、WebView 和全屏/系统栏接口。
  • 保留现有 build/release 工作流的触发条件、产物命名和发布方式,固定已验证的工具链与依赖,增加静态分析、Flutter 测试和 Release HAP 原生库 / Native Assets 校验。
  • 增加独立的 tool/ohos_smoke.dart 自检入口及构建验证文档;正常入口仍为 lib/main.dart。
  • 修复全屏方向恢复:进入全屏会设置 AUTO_ROTATION_LANDSCAPE,原退出逻辑仅为部分手机重设方向,导致平板及展开态设备残留横屏锁定。退出时现为这些设备恢复与启动配置一致的 AUTO_ROTATION_UNSPECIFIED,允许按重力感应及系统旋转设置切换方向;保留手机现有的 USER_ROTATION_PORTRAIT 行为。

当前 5 个提交

分支 codex/feat-ohos-2.3.9-integration 直接基于 feat-ohos,当前 HEAD 为 b75a12ab,共 5 个线性提交:

  1. 7ef082b8 — 同步 2.3.9 代码、鸿蒙兼容与上游原生依赖。
  2. f60308cc — 固定工具链并增加 Release 原生库 / Native Assets 校验。
  3. b7352816 — 整理自检工具与构建文档。
  4. adee96c1 — 记录 Release 真机验证结果及未覆盖范围。
  5. b75a12ab — 修复全屏退出后的自动旋转恢复,并补充方向回归记录。

两个依赖的上游适配

依赖 已合入的上游 PR 本项目固定提交
media_kit / media_kit_video Predidit/media-kit#43 9c31fe57c5c4492835dcd6fea968920f3b01bcb1
ech_http ech-research/ech_http#1 2c58622b3596593b1c6818ddca7cdd0a0631aa15

media-kit 的上游实现负责 OHOS 目标识别、鸿蒙 libmpv / C++ 运行库打包及 C 事件循环桥接;ech_http 的上游实现负责 OHOS 原生 SDK 和 Native Assets 接入。依赖直接引用各自上游的合入提交并通过 pubspec.lock 锁定,无需相邻的本地依赖仓库。

已完成的验证

工具链:Flutter-OH 3.41.9+ohos-1.0.2(62357a93)、Dart 3.11.5、HarmonyOS CLI 26.0.0.821 / SDK 26.0.0.105、JDK 17。

本地构建与播放自检

  • flutter pub get --enforce-lockfile 成功;213 项 Flutter 测试通过;dart analyze lib tool test 无 error/warning,保留 27 条现有 info 级 lint;PR 中两个工作流通过 actionlint。
  • 正常入口和自检入口的 arm64 Release HAP 均构建、原生库校验、签名和验签通过。确认包名 com.predidit.kazumi、版本 2.3.9 / 20309、debug=false、AOT libapp.so、无 Debug kernel,以及 ECH、mpv、C 事件循环和 C++ 运行库及映射完整。
  • MatePad mini(MLR-AL10,HarmonyOS API 26,arm64)完成正式包名首次安装、引导及规则安装。
  • 两轮 Release 自检通过:ECH 握手被接受,Bangumi 直接请求、实际 Dio adapter 和封面请求均 HTTP 200。
  • 软解 hwdec=no / 硬解 hwdec=ohcodec 与同步/异步四种组合,两轮合计 24 次播放/销毁、6 次初始化期间销毁通过。确认实际纹理画面、首帧及进度推进;并发/重复销毁正常,mpv 句柄归零,销毁耗时 70–189 ms。
  • 正常入口使用 mgnacg 规则完成《游戏人生》第 1 话的搜索、来源检索和在线播放,实际画面及播放进度超过 2 分钟。未观察到 Dart 未处理异常、进程崩溃或销毁超时。

全屏方向回归(2026-10-18)

  • 修复前,在上述平板的历史记录页确认仍残留横屏策略:系统窗口 dump 为 Orientation: 7,窗口 2560×1600。
  • 安装修复后的正常入口 Release 包并实际在线播放,分别使用“退出全屏”按钮和系统返回退出全屏,方向策略均恢复为 Orientation: 13,窗口回到 1600×2560,选集和评论布局恢复。
  • 再重复 3 次全屏/返回,并退出播放页,均恢复自动旋转策略及竖屏 UI。这里的方向数值来自系统窗口 dump,不是 ArkTS window.Orientation 枚举值。
  • 使用实际原生插件源码和模拟窗口执行回归:旧代码复现平板残留横屏锁定;修复后,平板、普通/折叠态手机、展开态手机、2in1,以及未显式全屏即退出的 6 项策略检查通过。模拟窗口检查与真机验证的覆盖范围见下节。

独立 CI 与预发布(2026-10-18)

  • 独立发布 CI 已成功:依赖锁定、静态分析、213 项 Flutter 测试、arm64 Release 构建及 HAP 原生库 / Native Assets 校验均通过。
  • 此 CI 验证的源码 Git tree 与当前 PR HEAD b75a12ab 完全一致;实际构建提交、工作流提交和产物 SHA-256 可在 build-info.json 中核对。上述结果来自独立发布流程;更新本描述时,上游 PR 的最新构建 仍为 action_required,尚未执行。
  • 已发布 2.3.9-ohos.3 预发布版,提供正式包名的未签名 HAP、SHA256SUMS 和构建信息;下载后已复核 SHA-256、源码提交和 HAP 内容。该预发布流程位于 fork 的独立分支,其专用工作流和打包脚本不包含在本 PR 中。
  • fork 本轮未配置弹弹及 Kazumi 镜像 API Secrets;预发布包未注入这些凭据,发布说明已注明相关鉴权功能限制。

构建命令、校验方法及本地验证记录见 OHOS_BUILD.md。原始本地日志和截图保存在 build/integration/,未随源码提交。

尚未覆盖的范围与已知限制

  • 真机验证限于上述 arm64/API 26 平板。最低 API 声明保持 20,但尚未完成低 API、其他设备、其他架构及模拟器回归;完整播放器的预构建库目前仅支持 OHOS arm64。
  • 手机、折叠屏和 2in1 的方向恢复仅完成模拟窗口策略检查,尚未做真机回归;横屏握持启动、进入播放后再竖握的连续传感器姿态切换也尚未人工复测。
  • 正式包名应用为首次安装,尚未验证从旧版 2.3.1 安装升级及数据迁移。此预发布包采用 com.predidit.kazumi,与此前 fork 的 com.predidit.kazumi.ohostest 独立测试包不同。
  • 未全面验证其他第三方规则、后台续播、下载和账号同步,也未执行其他操作系统的完整构建/运行矩阵。
  • 本地弹弹接口曾返回 HTTP 403,尚未验证带有效 API 凭据的弹幕加载及镜像鉴权;CI 编译/测试成功不代表这些在线鉴权功能已经通过验证。
  • 仍可见 Flutter-OH 图片方向等平台日志。

本次集成、修复与验证使用了 Codex AI 辅助。

Synchronize the upstream 2.3.9 source snapshot onto ErBWs feat-ohos. Preserve the OHOS project, package identity, repository configuration and update channel, and reuse the validated Flutter-OH integrations and merged upstream media-kit/ech_http support.

This ordinary commit contains the exact tree of the previously validated integration merge, without importing the divergent upstream commit history.
Keep the existing feat-ohos build and release workflows, pin the validated Flutter-OH and HarmonyOS SDK versions, install native build tools, enforce the lockfile, and run analysis and tests before checking Release AOT and native asset mappings.

Validation: actionlint passes; verifier accepts the normal-entry and smoke-entry arm64 Release HAPs.
Add the dedicated Release smoke entry for ECH, the Bangumi Dio adapter, cover downloads, video textures and deterministic player disposal. Document the pinned toolchain, formal package configuration, build verification and device-test procedure.
Record the formal-package Release builds, 213 passing tests, ECH API and cover checks, 24 render/dispose cycles and 6 early disposals, and normal-entry online playback and fullscreen checks on MatePad mini API 26. Document untested scenarios and the missing local danmaku API credentials.
@tignioj
tignioj force-pushed the codex/feat-ohos-2.3.9-integration branch from b947133 to adee96c Compare October 17, 2026 11:22
@tignioj
tignioj force-pushed the codex/feat-ohos-2.3.9-integration branch from da83f6a to b75a12a Compare October 17, 2026 16:40
@ErBWs

ErBWs commented Oct 17, 2026

Copy link
Copy Markdown
Owner

感谢你的工作,我会在最近几天进行cherry pick和验证,随后发布新版本。这个 PR 难以审查,为了后续移植维护的可靠性我会关闭这个 PR,手动进行cherry pick

@ErBWs ErBWs closed this Oct 17, 2026
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.

2 participants