本文主要讲解 Tauri 框架在鸿蒙上的适配以及使用方式。
本文涉及的代码仓库在: tauri-ohos
背景
Tauri 作为一个新兴的跨端框架,使用系统 Webview 作为 GUI 部分,后端则使用 Rust 作为实现。凭借其优秀的跨端性、便捷性和安全性逐渐在社区中兴起。不过该框架在社区的评价褒贬不一,评价非常两极化。
一派认为其极小的包体积和基于 Rust 后端的代码安全性,为快速实现原型和能力提供了非常好的基础。
另一派则是在开发中遇到了大量的兼容性问题或者是一些其他莫名其妙的问题无法解决从而转向了批判。
不过无论如何,它都是一个不错的跨端框架。因此笔者做了一些工作,确保它能够在鸿蒙上运行。
适配
对于 Tauri 的适配,我们主要需要完成两个底层库对齐的适配工作:
- Wry 主要用于创建当前运行环境下的 Webview 环境。
- Tao 主要用于归一化各平台的渲染机制和生命周期,本质上是 winit 的 fork 版本。
Wry
Wry 的适配主要需要将系统通过 ArkUI 提供的 ArkWeb 组件使用 Rust 进行初始化和挂载即可。这里不可避免的需要使用到 N-API 来生成一些胶水代码,而这部分胶水代码对于各个项目来说都是统一的。因此笔者在适配的过程中,通过统一的 OpenHarmony-Ability 仓库和对应的 Rust 包做了一定的简化,将胶水代码隐藏在内部,业务开发无所感知。
这里对源码不做过多的赘述,核心的原因是通过动态构建节点,然后挂载到 NodeContainer 上,感兴趣的读者可以参考: NodeContainer 实现 。
Tao
由于之前对 Winit 的适配基本上已经整体完成了,所以我们可以直接将 Winit 的适配逻辑迁移到 Tao 即可。核心实现就是将 ohos 的各种生命周期转发到 Tao 的统一定义上,这样使用者就是使用的一套实现。
使用
在 Tauri 官方维护成员的帮助下,完成了初版的 Tauri 适配以及其子命令 cargo-mobile2 的适配,我们可以实现对 Tauri 的开箱即用。
首先需要安装 cargo-mobile2 和 ohrs 用于项目的初始化和打包等流程。
cargo install tauri-cli --git https://github.com/tauri-apps/tauri --branch feat/open-harmony
cargo install ohrs
接下来你可以通过 cargo mobile 进行项目初始化等操作了, 不过现阶段我建议你使用我提供的模板项目更好,避免自行做一些适配处理。
git clone https://github.com/richerfu/tauri-demo.git
接下来直接执行依赖安装即可。
pnpm install
cd src-tauri && cargo fetch
最后执行构建并且运行即可。
cd src-tauri && cargo tauri ohos build
完成后即可打开 src-tauri/gen/ohos 目录对应的鸿蒙工程即可打开。
已知问题
- 社区的插件和官方插件理论上来说都需要单独适配对应的平台,无法做到开箱即用。
- cargo-mobile2 部分场景适配不好,还需要持续跟进,包括热更新等能力。
后续
后续我们将有几个事情需要继续推进:
- 推进 Tauri 适配进入主线。
- 推进依赖 Wry/Tao 等核心仓库的其他三方跨端框架的适配,比如现有的 Dioxus 等。
希望本文对你有所帮助~