Tauri 2 安卓开发初体验

日期 更新说明
2025年8月9日 初版发布

序言

《临江仙》【宋】晏几道

梦后楼台高锁,酒醒帘幕低垂。去年春恨却来时。落花人独立,微雨燕双飞。

记得小苹初见,两重心字罗衣。琵琶弦上说相思。当时明月在,曾照彩云归

深夜梦回楼台朱门紧锁,宿醉后醒来帘幕重重低垂。去年的春恨涌上心头时,人在落花纷扬中幽幽独立,燕子在微风细雨里双双翱飞。

还记得与小蘋初次相见,她穿着两重有心字图案的罗衣。她通过琵琶的弦声诉说着相思情意。当时明月如今犹在,曾照着她彩云般的身影回归。

亦或当年初遇Android开发时早已好几年前了,那小萍或许就是此时的Android吧,只是今日的Android在移动互联网末期早已不复当年,当年的初见不同来时。这或许是写这篇文章的缘由了。


前言

简介

Tauri 是一个构建适用于所有主流桌面和移动平台的轻快二进制文件的框架。开发者们可以集成任何用于创建用户界面的可以被编译成 HTML、JavaScript 和 CSS 的前端框架,同时可以在必要时使用 Rust、Swift 和 Kotlin 等语言编写后端逻辑。

tauri2基于webview开发,在跨端开发尤其是桌面端上有了新的选择。常见的桌面端开发框架有:Flutter、Electron、Tauri,下面综合对比下;可为你做跨端开发做出新的选择。

特性 Tauri Flutter Electron
核心框架 Rust (core) + WebView Dart + Skia/Impeller renderer Chromium + Node.js
UI 开发 Any HTML/JS/CSS framework Custom widgets (Dart) Any HTML/JS/CSS framework
内存占用 ~30-50 MB ~80-150 MB ~80-150 MB
平台支持 Win/macOS/Linux/Android/iOS Win/macOS/Linux/Android/iOS/Web Win/macOS/Linux
学习曲线

如何选择

何时选择哪种

  • 选择 Tauri 的条件:
  • 以桌面优先的应用程序
  • 安全关键型软件
  • 现有的网络应用程序需要原生扩展
  • 需要小巧的二进制文件(例如,实用程序)
  • 有 Rust 团队专业知识

选择 Flutter 的条件:

  • 以移动优先的开发
  • 需要像素级定制的 UI
  • 适用于所有平台(包括网络)的统一代码库
  • Material/Cupertino 设计系统符合需求

选择 Electron 的条件:

  • 仅基于网络的桌面应用程序
  • 现有的 Node.js 后端
  • 需要 100% 的网络开发工作流程
  • 使用网络工具进行快速原型设计
  • 仅限桌面分发

快速开始

亦可参见官方文档:Prerequisites

依赖环境

需要提前安装 rust node.js的开发环境,这里不再赘述

重点说下Android的开发环境:

  1. 下载并安装 Android Studio from the Android Developers website
  2. 使用SDK ManagerAndroid Studio安装如下插件:
  • Android SDK Platform(这个是默认的,不用单独安装)
  • Android SDK Platform-Tools
  • NDK (Side by side)
  • Android SDK Build-Tools
  • Android SDK Command-line Tools
  1. 配置 ANDROID_HOMENDK_HOME

创建项目

v2.tauri.app/zh-cn/start...

这里使用的npm工具的,可以根据实际情况选择

csharp 复制代码
# 创建项目
npm create tauri-app@latest

# 构建
npm install

# 初始化 Android 开发
npm run tauri android init

# 启动开发调试
npm run tauri android dev

# 打包构建
npm run tauri android dev

注意,注意,注意

注意事项:创建项目设置app的identifier时,不要用大写,且最好使用小写字母以xxx.xxx.xxx格式,否则在初始化安卓工程的时候会因为identifier问题不通过,会报错
vbnet 复制代码
error: custom attribute panicked
 --> src\lib.rs:7:20
  |
7 | #[cfg_attr(mobile, tauri::mobile_entry_point)]
  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = help: message: `""` is not a valid identifier

error: could not compile `tauri-android-demo` (lib) due to 1 previous error
`Failed to run `cargo build`: command ["cargo", "build", "--package", "tauri-android-demo", "--manifest-path", "D:\Space\rust\tauri\02-tauri-android-demo\src-tauri\Cargo.toml", "--target", "x86_64-linux-android", "--lib"] exited with code 101
       Error `Failed to run `cargo build`: command ["cargo", "build", "--package", "tauri-android-demo", "--manifest-path", "D:\Space\rust\tauri\02-tauri-android-demo\src-tauri\Cargo.toml", "--target", "x86_64-linux-android", "--lib"] exited with code 101

如果不小心错误设置了,在下图位置修改就行了,修改之后重新 pnpm tauri android init初始化安卓工程代码

实名感谢Tauri 2.x 正式版 安卓应用创建、开发环境搭建体验_tauri2-CSDN博客的作者;被坑好久。

下图是npm run tauri info的环境信息;供给大家参考:

markdown 复制代码
> tauri-android-demo@0.1.0 tauri
> tauri info


[✔] Environment
    - OS: Windows 10.0.22621 x86_64 (X64)
    ✔ WebView2: 138.0.3351.121
    ✔ MSVC: Visual Studio Professional 2022
    ✔ rustc: 1.86.0 (05f9846f8 2025-03-31)
    ✔ cargo: 1.86.0 (adf9b6ad1 2025-02-28)
    ✔ rustup: 1.28.1 (f9edccde0 2025-03-05)
    ✔ Rust toolchain: stable-x86_64-pc-windows-msvc (default)
    - node: 22.14.0
    - npm: 10.9.2

[-] Packages
    - tauri 🦀: 2.7.0
    - tauri-build 🦀: 2.3.1
    - wry 🦀: 0.52.1
    - tao 🦀: 0.34.0
    - @tauri-apps/api : 2.7.0
    - @tauri-apps/cli : 2.7.1

[-] Plugins
    - tauri-plugin-opener 🦀: 2.4.0
    - @tauri-apps/plugin-opener : 2.4.0

[-] App
    - build-type: bundle
    - CSP: unset
    - frontendDist: ../dist
    - devUrl: http://localhost:1420/
    - framework: Vue.js
    - bundler: Vite

运行项目

打包项目

打包完成基本大小 20 多 M,这个是 28M 左右。从开发体验来说,笔者之前没有做过客户端开发,整个过程个人觉得十分流畅和丝滑。


参考资料:

相关推荐
GetcharZp15 小时前
GitHub 49K+ Star!C++ 开发者必知的 JSON 神级库:从零到精通全指北
后端
xujinwei_gingko15 小时前
SpringBoot整合WebSocket
spring boot·后端·websocket
智码看视界16 小时前
现代Web开发基础:全栈工程师的起航点
前端·后端·c5全栈
程序员cxuan16 小时前
Claude Fable 5 来了
人工智能·后端·程序员
JS菌16 小时前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
wang090717 小时前
自己动手写一个spring之IOC_2
java·后端·spring
ltl17 小时前
推理退化:为什么大模型会输出乱码、死循环和无意义文本
后端
ltl17 小时前
架构视图与文档:C4 模型从入门到实战
后端
IT_陈寒20 小时前
Redis持久化这个坑,我爬了一整天才出来
前端·人工智能·后端
无风听海20 小时前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask