tauri第一个大项目结项

背景

这学期上了 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 的代码,并在本地运行。

项目截图

alt text
alt text
alt text
alt text

实现思路

  1. Rust 后端使用全局 State 进行播放状态的管理
  2. 前端调用 invoke 方法来调用 Rust 后端的方法
  3. Rust 后端使用 #[tauri::command] 来暴露方法给前端调用
    • 保存与存储本地数据
    • 实现音乐播放等功能(使用Rodio库实现)
    • 实现音乐搜索等功能(使用开源项目的 API)
    • 异步处理(使用Tokio库实现)

一些坑:

  • Tauri 需要修改 tauri.conf.json 文件来配置应用程序的基本信息,如名称、版本、图标等。
  • Tauri 需要配置 permissions 来控制应用程序的权限,如访问文件系统、窗口和 dialog 等。
  • 对于外部的二进制文件,不仅需要在 tauri.conf.json 中配置,还需要在所在的 binaries 目录中添加对应 Target 的后缀的文件(如 sidecar.exeWindows 下需要再添加一个 sidecar-x86_64-pc-windows-msvc.exe 的文件)
  • 对于 Icon 的配置,需要在 tauri.conf.json 中配置 icon 的路径,并且需要提供不同平台下的图标文件,如 icon.icnsicon.ico 等。
  • 一些 plugin 库需要自己手动引入,如 tauri-plugin-dialogtauri-plugin-shell 等。

项目感悟

这个项目是我第一次使用 Rust 来进行开发,虽然在学习 Rust 的过程中遇到了很多问题,但最终还是完成了这个项目。

使用 Tauri 进行开发的过程中,遇到了一些问题,但总体来说还是比较顺利的。
在使用 Tauri 的过程中,最大的感受就是它的文档不够完善,有很多地方需要自己去摸索。同时还发现官方文档有些地方是过时的,导致在使用过程中遇到了一些问题。不过比较好的一点是,文档基本会提供一些示例代码,帮助开发者更好地理解。

相较于 Electron 来说,Tauri 的学习曲线还是比较陡峭的,但一旦上手了,就会发现它的优势所在。