5.1 跨平台开发总览

原文链接: Develop

5.1 跨平台开发总览

到了这一章,我们要回答你最关心的问题:同一套代码在 macOS、Windows、Android、iOS 上分别是什么样子?

先记住一个模型

flowchart TB
    subgraph SHARED["你编写的共享部分"]
        A["Web 前端(一套)"]
        B["Rust 业务逻辑(一套)"]
    end

    subgraph SHELLS["各平台原生壳"]
        C["Windows:WebView2 + 原生进程"]
        D["macOS:WKWebView + .app"]
        E["Android:Android WebView + Kotlin Activity"]
        F["iOS:WKWebView + Objective-C++/Xcode 工程"]
    end

    A --> SHELLS
    B --> SHELLS

Tauri 的策略是:Web 前端和 Rust 逻辑尽量共享,只让“壳工程”跟随平台变化。所谓壳工程,就是系统用来启动和托管你的应用的少量原生代码。

平台差异总表

平台渲染引擎原生工具生成工程位置常见最终产物
WindowsWebView2Visual Studio C++ Build Tools不需要额外生成.exe、.msi
macOSWKWebViewXcode Command Line Tools / Xcode不需要额外生成.app、.dmg
LinuxWebKitGTK各发行版依赖不需要额外生成.deb、.rpm、AppImage
AndroidAndroid WebViewAndroid Studiosrc-tauri/gen/android/.apk、.aab
iOSWKWebViewXcode + CocoaPodssrc-tauri/gen/apple/.app、.ipa

注意:桌面平台由 Rust 编译出一个可执行文件,移动平台则是把 Rust 编译成静态库/动态库,再被原生壳加载。

开发命令对照

场景命令
桌面开发npm run tauri dev
桌面发布构建npm run tauri build
Android 开发npm run tauri android dev
iOS 开发npm run tauri ios dev
Android 发布构建npm run tauri android build
iOS 发布构建npm run tauri ios build

为什么会有 gen/ 目录?

初次创建项目时,你看到的只有 src-tauri/。执行移动端初始化后,会生成平台原生产物:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
src-tauri/
├── tauri.conf.json
├── src/
├── gen/
│   ├── android/          # 由 tauri android init 生成
│   │   ├── settings.gradle
│   │   ├── app/
│   │   └── gradlew
│   └── apple/            # 由 tauri ios init 生成
│       ├── Podfile
│       ├── Assets.xcassets
│       ├── Sources/
│       └── YourApp.xcodeproj
└── schemas/              # IDE 自动补全用的 schema

桌面平台不生成类似壳工程,是因为操作系统直接运行编译好的二进制即可。

三个重要的平台现实

  1. iOS 只能在 macOS 上构建,苹果有明确限制。
  2. Android 构建主要靠 Gradle,因此路径里有大量 .gradle 文件。
  3. Windows 构建最好在 Windows 上做;虽可用 CI 或 cargo-xwin 交叉编译,但原生 WebView2/安装包工具仍以 Windows 环境最省心。

平台专属配置

平台差异还能通过 tauri.macos.conf.json、tauri.windows.conf.json、tauri.android.conf.json、tauri.ios.conf.json 微调,见 4.4 配置文件详解。

下一步

逐平台看布局与代码: