ZCodeHMOS:基于 HarmonyOS 的 Electron 桌面应用桥接项目

可将 ZCode Electron 桌面应用移植到 HarmonyOS 2in1 设备,实现跨平台运行。项目包含 ArkTS 桥接层、Electron 模块适配、构建插件及原生 SQLite NAPI 扩展,解决多方面运行限制。【此简介由AI生成】

分支2Tags3
文件最后提交记录最后更新时间
21 小时前
22 小时前
1 分钟前
21 小时前
20 小时前
1 分钟前
18 分钟前
29 分钟前
4 个月前
3 小时前
1 天前
1 天前
1 天前
21 小时前
4 个月前
29 分钟前
4 个月前
4 个月前
18 分钟前
21 天前

ZCode for HarmonyOS

将 ZCode(Electron 桌面应用)移植到 HarmonyOS 2in1 设备的桥接项目。

EntryAbility → XComponent → libadapter.so → libelectron.so
                                                   ↓
                                         entry.mjs → host → agent

目录

web_engine/       ArkTS 桥接层(含 USB 桥接服务 UsbBridgeServer / UsbBridgeAdapter)
electron/         Electron 模块(权限、Ability)
hvigor/plugin/    构建插件 + 运行时模板(含 usbctl.mjs 客户端)
native/           NAPI addon:SQLite、node-pty、libusb shim
vendor/           ZCode 运行时资源(gitignored)

USB 外设访问

普通应用读不到 /dev/bus/usb(节点 open 恒 EACCES),libusb 直接枚举必失败。 本项目用 @ohos.usbManager(无 @permission 限制,用户授权一次即可)在应用内起一个 本地桥接服务,让 agent 和原生工具都能访问 USB 设备:

原生工具(pk2cmd) ─ libusb-1.0.so.0(shim) ─┐
agent 终端 ─ node usbctl.mjs ─────────────┴─→ 127.0.0.1:7788 ─→ usbManager ─→ USB 设备
  • 服务:web_engine/src/main/ets/adapter/UsbBridgeServer.ets,窗口就绪 6 秒后监听 127.0.0.1:7788,行协议:list / open <bus> <addr> / claim / control / bulk / close。 不做任何 VID/PID 假设,任意设备可打开。
  • 客户端:node <resfile>/usbctl.mjs <命令>(随包部署,PATH 已含 node)。 用法示例与排障见 skill usb-bridge(~/.zcode/skills/usb-bridge/SKILL.md)。
  • 原生工具:native/usb-libusb-shim/ 提供 libusb-1.0.so.0,把 libusb 调用转发到 7788;LD_LIBRARY_PATH 已在 entry.mjs / wrapper.mjs 中注入,pk2cmd 之类 源码不用改即可用(静态链接 libusb 的除外)。重建:bash native/usb-libusb-shim/compile.sh。
  • 首次访问会弹系统授权框,需前台确认;授权按设备名(bus-addr)记忆。

DDK(ACCESS_DDK_USB)不是这里的通路:UsbDdk 只能在 DriverExtensionAbility 内调用, 且其 metadata 的 vid/pid 白名单不支持通配符,运行时按 deviceId 绑定所需的 ACCESS_DDK_DRIVERS 在调试签名下装不上。需要“设备固定 + 白名单写死”的专项驱动时再用。

更新 ZCode

下载新版 linux-arm64 AppImage 解压到 vendor/ZCode-x.x.x-linux-arm64/,构建插件自动选最高版本。

已知限制

  • fs/promises.glob → polyfill
  • node:sqlite → 自定义 NAPI addon(静态编译 SQLite 3.49.1)
  • child_process.spawn → spawn-wrapper 重定向(seccomp)
  • process.title 写 → setter 拦截(uv_set_process_title SIGSEGV)
  • Renderer 进程无 JIT(缺权限)

项目介绍

可将 ZCode Electron 桌面应用移植到 HarmonyOS 2in1 设备,实现跨平台运行。项目包含 ArkTS 桥接层、Electron 模块适配、构建插件及原生 SQLite NAPI 扩展,解决多方面运行限制。【此简介由AI生成】

定制我的领域