Intro
通过跨平台的桌面应用框架 Tauri,实现同一套代码编译成多个平台 macOS, Windows, Linux, Android, iOS 的二进制文件。
(相比于 Electron,具有分发体积小、二进制文件不易被反编译出源码的优点)
相比于通过浏览器访问的时候,我只能用 JavaScript 玩花样。通过独立应用的形式,可以更方便地实现:
- 对抗 DNS 污染
(Thanks to https://docs.rs/tauri/2.0.0-beta.16/tauri/struct.Url.html#method.set_ip_host) - 提高到服务器的网络连接的稳定性(userspace BBR congestion control)
(Thanks to QUIC and a great discontinued open source project)
TODO
会根据他人的贡献(欢迎其他同学加入)和我的心情,做以下的事情:
- 缓存控制与离线浏览
- 离线新建话题(待在线时同步到服务器)
- 使用 Svelte(Kit) 做一个前端,不求支持目前的 Ember.js 前端的所有功能,只是练练手
Technical notes
- tauri 今年 2 月推出了 v2 beta,新增 android+ios 支持,但文档不全。我采用了 beta 版
- tauri 跨平台编译(在 linux 上面编译 windows 的二进制有警告:
Warn [tauri_bundler::bundle] Cross-platform compilation is experimental and does not support all features. Please use a matching host system for full compatibility.
)
但我还是完成了编译,需要安装yay -S nsis
,并且注意在 Cargo.toml 中不能 tauri-api
依赖。(我中途甚至在 Vbox 虚拟机里配置了开发环境,但 win 实在太恶心了,Terminal/File Manager 简陋、系统级广告、Windows Update、意想不到的编译错误,由于系统语言是 zh,直接搜索错误信息会出来一大堆 csdn, juejim, 腾讯云,知乎 之类的垃圾站)
gnu target 不行,提示 webview2loader.dll not found. 需要使用 msvc target:
https://github.com/tauri-apps/tauri/issues/8336
https://tauri.app/v1/guides/building/cross-platform/
# NO_STRIP is for building AppImage
NO_STRIP=true pnpm run tauri build
pnpm tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc
tauri 1 的基于 wry 的 webview 不支持 socks5 proxy, 尝试 cherry pick / backport 到 v1 由于 wry 依赖版本问题失败。
tauri 2 目前打包成 windows 运行存在问题:白屏,resize 后 webview 的大小不变,理论上支持嵌入二进制文件(sidecar)但我没找到 v2 的文档,似乎只能从 js 调用
Code Releases
基于 tauri v2 版本,使用 svelte 模板:
基于 v1 版本:
主要工具为 pnpm/cargo
pnpm install
pnpm tauri dev
# or
cargo tauri dev
感想
今天写/调了一天 Rust,学到了不少东西。
tauri 的 v1 和 v2、rust+js 给人精神分裂的感觉,并且 Rust 为了函数签名一致,写起来没动态语言方便。等 tauri2 从 beta 变成正式释出,修复缩放黑屏的 bug 后再研究嵌入二进制的事情。
electron 更成熟一些,明天(2024-05-02T05:35:13Z)再尝试用 electron 吧,缺点就是释出的安装包体积大了一点。(大了不止一点,20x~60x)