背景
这学期上了 Rust 的课程,最后的期末大作业是用 Rust 完成一个项目。
我大致在 Github 上浏览了有关 Rust 及其相关的应用层面的框架,发现了有 Slint、Tauri、Iced、以及 Actix、Axum 等等。
在这些和 Rust 相关的框架中,我选择了 Tauri 来进行练习。
最终项目的 Github 地址是:tauri-rmusic
Tauri
Tauri 是一个用于构建跨平台桌面应用程序的框架,使用 Rust 作为后端语言,前端可以使用任何 Web 技术(如 HTML、CSS 和 JavaScript)。它的设计目标是提供一个轻量级、高性能的解决方案,同时保持良好的安全性和隐私保护。
Tauri 的主要特点包括:
- 小巧:Tauri 应用程序的大小通常比 Electron 应用程序小得多,因为它不需要捆绑整个浏览器引擎。
- 安全性:Tauri 提供了一些内置的安全功能,如 CSP(内容安全策略)和权限管理,以帮助开发者构建更安全的应用程序。
- 跨平台:Tauri 支持 Windows、macOS 和 Linux 等多个平台,允许开发者编写一次代码并在多个平台上运行。
- 灵活性:Tauri 允许开发者使用他们熟悉的前端技术栈(如 React、Vue、Angular 等)来构建用户界面,同时使用 Rust 来处理后端逻辑。
- 高性能:由于 Tauri 使用 Rust 作为后端语言,因此它可以充分利用 Rust 的性能优势,提供更快的响应速度和更低的资源占用。
- 社区支持:Tauri 拥有一个活跃的社区,提供了丰富的文档和示例,帮助开发者快速上手。p.s.(实际上感觉文档还是不够完善)
我的项目
我的项目是桌面音乐播放器。
使用 Vue3 + TypeScript + Element-Plus + Vite 来进行前端的开发
使用 Tauri 来进行后端的开发
主要功能
- 播放器的基本功能:播放、暂停、上一曲、下一曲、音量调节
- 搜索功能:可以根据歌曲名、歌手名、专辑名等进行搜索
- 下载到本地:可以将歌曲下载到本地
本项目主要愿景是实现一个最为纯粹的音乐播放器,去掉一些多余的功能,专注于音乐本身。
搜索功能来自开源项目的 API
p.s. 由于版权问题,提供的 Release 版本中没有包含这两个 API 的代码,使用时需要自行下载这两个 API 的代码,并在本地运行。
项目截图
实现思路
- Rust 后端使用全局 State 进行播放状态的管理
- 前端调用
invoke
方法来调用 Rust 后端的方法 - Rust 后端使用
#[tauri::command]
来暴露方法给前端调用- 保存与存储本地数据
- 实现音乐播放等功能(使用
Rodio
库实现) - 实现音乐搜索等功能(使用开源项目的 API)
- 异步处理(使用
Tokio
库实现)
一些坑:
- Tauri 需要修改
tauri.conf.json
文件来配置应用程序的基本信息,如名称、版本、图标等。 - Tauri 需要配置
permissions
来控制应用程序的权限,如访问文件系统、窗口和dialog
等。 - 对于外部的二进制文件,不仅需要在
tauri.conf.json
中配置,还需要在所在的binaries
目录中添加对应Target
的后缀的文件(如sidecar.exe
在Windows
下需要再添加一个sidecar-x86_64-pc-windows-msvc.exe
的文件) - 对于
Icon
的配置,需要在tauri.conf.json
中配置icon
的路径,并且需要提供不同平台下的图标文件,如icon.icns
、icon.ico
等。 - 一些
plugin
库需要自己手动引入,如tauri-plugin-dialog
、tauri-plugin-shell
等。
项目感悟
这个项目是我第一次使用 Rust 来进行开发,虽然在学习 Rust 的过程中遇到了很多问题,但最终还是完成了这个项目。
使用 Tauri 进行开发的过程中,遇到了一些问题,但总体来说还是比较顺利的。
在使用 Tauri 的过程中,最大的感受就是它的文档不够完善,有很多地方需要自己去摸索。同时还发现官方文档有些地方是过时的,导致在使用过程中遇到了一些问题。不过比较好的一点是,文档基本会提供一些示例代码,帮助开发者更好地理解。
相较于 Electron 来说,Tauri 的学习曲线还是比较陡峭的,但一旦上手了,就会发现它的优势所在。