公司动态

cc-switch 鸿蒙 PC移植:使用Tauri官方 feat/open-harmony 分支最新版本移植实录

📅 2026/8/23 19:01:01
cc-switch 鸿蒙 PC移植:使用Tauri官方 feat/open-harmony 分支最新版本移植实录
2026-08-18 晚,基于tauri 官方仓库 feat/open-harmony 分支(tauri2.11.5,crates.io 官方最新版)重新移植 cc-switch 到 HarmonyOS PC。上一篇实录里用的社区 fork 停在 tauri 2.8.5,把整个依赖树锁死在两年前;这一次,插件全部用最新版,一个都不用降。项目地址*:https://atomgit.com/qq8864/cc-switch-harmonyos更多交流学习,欢迎加入开源鸿蒙PC社区:https://harmonypc.csdn.net/欢迎在PC社区平台申请新建项目:https://atomgit.com/OpenHarmonyPCDeveloper猫哥的博客:https://blog.csdn.net/qq8864起因:旧 fork 的版本债第一次移植 cc-switch 到鸿蒙 PC 时,用的是社区维护的 fork(基于 tauri 2.8.5)。那个 fork 能跑,但代价很重:tauri 2.8.5 → tauri-plugin-log 锁 =2.7.1、dialog 锁 =2.4.2、updater 锁 =2.9.0 …上游插件早就进化到 2.9/2.10 了,我们却要为了兼容 2.8.x 的 API 面,把每个插件钉回老版本——这就是"版本债":能跑,但整个项目的基础设施停在两年前,以后想升级上游代码,先得还债。于是我决定从官方 fork 一份 tauri,在feat/open-harmony分支上重新移植。结果发现:官方自己已经在维护 OpenHarmony 支持了。仓库分支版本tauri-apps/tauri(经 yangyongzhen fork)feat/open-harmonytauri 2.11.5(= crates.io 官方最新)tauri-apps/wryfeat/open-harmony0.56.0tauri-apps/taofeat/open-harmony0.36.0tauri-apps/cargo-mobile2feat/ohos0.22.4wry、tao、cargo-mobile2 三个底层库的 OHOS 支持分支都在tauri-apps 官方账号下——这不是民间 hack,是官方生态的一部分。成果速览验证项结果Rust 交叉编译libcc_switch_lib.so(aarch64 ELF,strip 后23.7MB,旧 fork 是 33MB)HAPentry-default-signed.hap(34.8MB,旧 fork 39.8MB,签名版)真机HUAWEI MateBook Pro HAD-W32,API 24,aarch64,hdc install+aa start成功进程主进程 + GPU + render 三进程稳定存活后端数据库迁移、189 条模型定价、Copilot/Codex/Xai OAuth、全局代理全部初始化,0 错误前端从tauri://localhost/assets/...加载(生产模式),React 正常挂载,0 panic / 0 error_boundary插件log 2.9.0 / store 2.4.4 / process 2.3.1 / dialog 2.7.2 / fs 2.5.1 / opener 2.5.4 / updater 2.10.1 / deep-link 2.4.9 / window-state 2.4.1 / single-instance 2.4.3,全部 crates.io 最新体积还变小了 10MB。新代码,新体积,何乐不为。原理:还是那套,前端零改动cc-switch (Rust + React) → libcc_switch_lib.so(napi-ohos 桥接,mobile_entry_point 宏展开) → OHOS ArkWeb WebView(渲染原前端,withGlobalTauri 全局桥) → HAP(hvigor 打包,签名后 hdc 部署)React 前端原样打包,window.__TAURI__全局桥提供 IPC。Rust 后端交叉编译成.so,由RustAbility(@ohos-rs/ability)加载。原理没变,变的是依赖图和踩坑清单。第一关:依赖解析,patch 的完全体上次移植最大的坑是links = "Tauri"冲突(路径依赖不被解析器当作插件版本候选),解法是用[patch.crates-io]。这次 fork 换新,同样的机制,但要 patch 的东西多了三样:1. tauri 系列:path patch(和上次一样)[patch.crates-io] tauri = { path = "D:/tauri-ohos-new/crates/tauri" } tauri-build = { path = "D:/tauri-ohos-new/crates/tauri-build" } tauri-macros = { path = "D:/tauri-ohos-new/crates/tauri-macros" } tauri-codegen = { path = "D:/tauri-ohos-new/crates/tauri-codegen" } tauri-utils = { path = "D:/tauri-ohos-new/crates/tauri-utils" } tauri-runtime = { path = "D