Tauri 2.0 Beta终于出了。最让人兴奋的变化是移动端支持——同一套代码可以编译到iOS和Android。虽然还是Beta阶段,但已经值得提前了解。这篇记录一下Tauri 2.0的主要变化和移动端体验。
Tauri 2.0的核心变化
Tauri 1.x只支持桌面端(Windows/macOS/Linux),2.0把目标扩展到了移动端。主要变化:
移动端支持
这是2.0最大的卖点。Tauri 2.0在移动端使用系统自带的WebView(iOS上是WKWebView,Android上是WebView2),和桌面端的思路一致——不打包浏览器引擎,用系统组件渲染前端。
移动端的Rust后端通过JNI(Android)和Swift桥接(iOS)与原生层通信。这意味着理论上可以调用所有原生API。
插件系统重构
1.x的API是硬编码在核心里的,2.0改成了插件架构。文件系统、Shell、对话框等原来内置的功能都拆成了独立插件:
# Cargo.toml
[dependencies]
tauri = "2.0.0-beta"
tauri-plugin-fs = "2.0.0-beta"
tauri-plugin-dialog = "2.0.0-beta"
tauri-plugin-shell = "2.0.0-beta"
好处是按需引入,减小打包体积。也便于社区开发第三方插件。
权限系统
2.0引入了细粒度的权限控制。每个插件的每个能力都需要在配置中显式声明:
{
"tauri": {
"allowlist": {
"fs": {
"scope": ["$APPDATA/**", "$DOWNLOAD/**"],
"readFile": true,
"writeFile": true
},
"dialog": {
"open": true,
"save": true
},
"shell": {
"open": true,
"execute": false
}
}
}
}
这比1.x的all-or-nothing安全多了。用户可以明确知道应用请求了哪些权限。
与1.x的区别
| 特性 | Tauri 1.x | Tauri 2.0 |
|---|---|---|
| 平台支持 | 桌面端 | 桌面+移动端 |
| API架构 | 内置 | 插件化 |
| 权限控制 | 粗粒度 | 细粒度 |
| IPC协议 | JSON序列化 | 更高效的协议 |
| 配置格式 | tauri.conf.json | 支持JSON/TOML |
| 最低Rust版本 | 1.59 | 1.70 |
迁移成本方面,如果1.x项目不复杂,主要是把内置API调用改成插件调用,工作量不大。但如果用了很多自定义Command,需要逐个检查兼容性。
移动端体验
环境准备
开发移动端需要额外的工具链:
- iOS:需要Xcode和iOS模拟器
- Android:需要Android Studio、NDK和模拟器
Tauri CLI已经集成了移动端的初始化和构建命令:
# 添加移动端支持
cargo tauri android init
cargo tauri ios init
# 开发模式
cargo tauri android dev
cargo tauri ios dev
# 构建
cargo tauri android build
cargo tauri ios build
实际体验
我拿一个简单的Tauri 1.x项目试了迁移。前端是React + Tailwind,后端有几个文件操作的Command。
iOS:在模拟器上跑起来了,WKWebView渲染效果和Safari一致。页面交互流畅,Rust Command调用正常。但有些CSS效果在移动端需要调整(比如hover状态)。
Android:也能跑,但遇到了一些WebView兼容性问题。不同Android版本的WebView差异还是挺大的,低版本上部分CSS特性不支持。
性能:冷启动速度比Electron快很多(废话,没打包Chromium),和原生App差距不大。内存占用也很低,比React Native还小。
移动端的限制
Beta阶段还有不少限制:
- 部分桌面端插件还没适配移动端
- 热重载在移动端不太稳定
- 打包签名流程还不够自动化
- 移动端特有的API(推送通知、传感器等)插件还不全
性能表现
对比了一下同一个简单应用在不同框架下的表现(Android):
| 指标 | Tauri 2.0 | React Native | Flutter |
|---|---|---|---|
| APK大小 | ~8MB | ~25MB | ~15MB |
| 冷启动 | ~400ms | ~800ms | ~300ms |
| 内存占用 | ~60MB | ~120MB | ~80MB |
Tauri在包体积和内存占用上优势明显。冷启动速度不如Flutter但比RN好。不过这是一个很简单的应用,复杂应用可能差异更大。
迁移建议
- 如果是新项目且需要同时覆盖桌面和移动端,可以考虑直接上2.0
- 现有1.x项目不急着迁移,等正式版出来再说
- 如果只做桌面端,1.x已经很稳定了,等2.0稳定了再升级
- 重度依赖移动端原生能力的项目(相机、蓝牙、NFC等),现阶段还不太适合Tauri
总体评价
Tauri 2.0的移动端支持让Rust+Web的技术栈覆盖面一下子大了很多。虽然Beta阶段还有不少毛糙的地方,但方向是对的。对于前端开发者来说,用熟悉的Web技术做跨平台应用,Tauri正在成为Electron之外的真正可选项。
期待正式版发布。