把「仓颉爱音乐」搬到鸿蒙 PC:业务代码一行没改,开发鸿蒙应用这么简单?

发布时间:2026/10/24 2:32:41
把「仓颉爱音乐」搬到鸿蒙 PC:业务代码一行没改,开发鸿蒙应用这么简单? 本来已经有了电脑pc版linux和winddows)的仓颉爱音乐桌面应用。之所以起这个名字是因为这个是使用cj-tauri五分钟开发的一个轻量级桌面应用旨在演示仓颉版tauricj-tauri开发效率的魅力。今天把「仓颉爱音乐」搬到鸿蒙 PC没想到业务代码一行没改换掉的仅是宿主如此简单我使用的设备是华为 MateBook ProHAD-W32 /HarmonyOS 7.0.0.107 / API 26 / aarch643120×2080 px工具链用 DevEco 6.1 的仓颉插件。结论放前面业务代码零改动examples/music/src一个字没动改的全部是「谁在跑页面」这件事—— 桌面用 WebView2 / WebKitGTK鸿蒙用 ArkWeb 组件就这点差别。比起rust的tauri简单太多。项目开源地址https://atomgit.com/qq8864/cj-tauri/tree/main/examples/ohos/ohos-music目标证明「框架」不是替某个平台定制的我先给自己定的验收标准很克制但都是页面自证、不看退出码窗口是桌面形态能拉宽、三栏并排不是手机兼容窗热门歌曲与后台歌单真的从后端拉到了不是空列表 错误 toast播放进度在走有具体时刻比如 00:17 / 03:42页面和命令层是examples/music那一份没有为鸿蒙另抄一套。第 4 条是这次真正的实验点。如果为了跑上鸿蒙要维护两份业务代码那这个框架的「跨平台」就是假的。cj-tauri是什么cj-tauri · 仓颉版 Tauri。用华为仓颉语言实现的桌面应用混合开发框架 —— 仓颉静态编译后端 系统 WebView 前端产物不带 Chromium、几 MB 级。官网地址https://yangyongzhen.github.io/cj-tauri/项目地址https://atomgit.com/qq8864/cj-tauri业务代码只留一份构建时同步 改包名鸿蒙工程里没有ui/、也没有业务.cj——musiclib/是生成物、不入库。每次bash build-hap.sh会做两件事examples/music/src/*.cj去掉 main.cj └─ 复制到 entry/src/main/cangjie/musiclib/ └─ 只改第一行package music_app → package ohos_app_cangjie_entry.musiclib examples/music/ui/index.html capabilities/default.json └─ base64 编码 → musiclib/ohos_assets.cj编译进包的字符串常量于是「谁是源」很清楚改业务逻辑去改examples/music改完重跑build-hap.sh--no-sync可跳过同步。生成物这条路不是偷懒是因为另一种写法没验证过# 不这么写music 的模块是 output-type executable、自带 main() # 把它当依赖编进动态模块鸿蒙侧是 dynamic属于没跑通过的形态 music { path ../../../../music }entry 只依赖框架源码cjTauri业务作为「同包内的副本」参与编译——和之前探针工程跑通的构建链完全一致。顺带一个便宜的好处页面走base64 内嵌绕开了仓颉三引号字符串会把 JS 里的反斜杠转义先吃一遍那个坑内联 JS 里写\n会变成真换行把字符串或单行注释拆断整段script语法错误、页面一行都不执行而 stderr 毫无提示。这条路我在别的示例上付过一次学费。UIAbility 只做三件事鸿蒙上没有「自己起个进程跑main()」这回事窗口属于 ArkUI页面由 ArkWeb 组件承载。所以main_ability.cj很薄三件事顺序不能错// 1) 沙箱目录必须在 run() 之前给run(html) 要把内联页面落盘再以 file:// 加载letfilesDir${this.context.filesDir}ArkWebRuntime.configure(filesDir)configureMusicRuntime(filesDir)// 收藏库也改落沙箱// 2) run() 阻塞到 quit只能在非 UI 线程跑——UI 线程要留给 ArkUI 建树let_spawn{startTauriMusic()}第三件在onWindowStageCreate里等框架把默认窗口的宿主登记上再loadContent。这一步是白屏那一轮的结论——组件的build()是一次性求值页面地址为空就永远不建Web我给的是 3 秒有界等待等不到也照常loadContent让页面自己报「桥缺失」比静默白屏好查。两个「不这么写就是错」的配置这两条都属于「报错指向的地方不是真因」所以列出来比讲原理有用①deviceTypes必须写2in1。只写phone/tablet时系统把它当手机应用给一扇约 600 宽的竖屏兼容窗歌单和播放器挤成一列。但仓颉构建插件默认把deviceTypes限死成phone/tablet写2in1直接判01103012。放行开关在entry/build-profile.json5cangjieOptions: { path: ./cjpm.toml, checkDeviceTypes: false }②ohos.permission.INTERNET。缺了它每次请求都死成SocketException: Failed to create socket: Operation not permitted.而页面上显示的是自家的文案「歌单拉取失败连不上后台接口」——看着像断网、像后端挂了实际是权限。这条是normal级安装即生效、不弹窗。判据很干净同一份 hap 只差这一项截图从「全空 错误 toast」变成「歌单 6 张 封面加载」。真机上的样子解压安装、aa start之后hilog 里CjMusictag该有这条链MainAbility OnCreated.MainAbility host registered after N polls labelmain host pageUrl labelmain urlfile:///data/storage/el2/base/haps/entry/files/cj-tauri-main.html page begin labelmain main window keeps system default 2090x1394 px at density 190% on screen 3120x2080, rect[515 281 2090 1394]窗口那行现在是2090×1394——系统按桌面形态给的默认值。这里我走过两轮弯路第一版resize(1440, 900)只占屏宽 46%第二版按逻辑 vp × 密度在开窗瞬间跳一下最后裁定「不干预窗口」细节写在另一篇里。早期版本这里打的是2683x1747那个数已经不用了。页面侧的自证三栏、热门歌曲与后台歌单都出来了、封面在加载播放进度停在某个具体时刻——这四条对上才算这个示例真的通了而不是「窗口起来了」。已知限制如实记与ohos-movie共用bundleNamecom.yang.testcj两个工程复用同一份调试签名所以装那个会顶掉这个一台设备上只能留一个。换bundleName要在 DevEco 里重新自动签名命令行做不了这步我没做。music:quit在设备上不退出进程它只置框架的退出意图鸿蒙侧进程生命周期归系统管页面侧看起来是「已退出」。真要退用hdc shell aa force-stop com.yang.testcj。收藏与配置落沙箱filesDir/music-library.local.json桌面版是工程根的相对路径卸载即清。aa start需要屏幕已解锁开发者模式下没法自动解锁锁屏时表现为启动失败或者抓到一张锁屏截图。单窗口一扇窗、无原生对话框多窗口与弹窗的取证留在examples/ohos-probe。一句总结这个示例最有价值的地方不是「跑起来了」而是演示了使用cj-tauri开发跨linux,windows和鸿蒙pc的多端PC应用开发是多么的简单业务代码一行没改。宿主换了一整ArkWeb上层的命令层、能力校验、IPC 分发还是同一份——这才是我当初做这个框架想要的形状。下一篇写观影示例它在鸿蒙上撞到一个更硬的东西——仓颉运行时在设备上装不了 TLS的踩坑记录。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询