Tauri 2.x 开始正式支持移动端(Android 和 iOS),这意味着你可以用同一套前端代码和 Rust 后端,构建出桌面端和移动端的原生应用。移动端的打包、签名与发布比桌面端稍显复杂,因为需要处理平台特有的证书和商店流程,但 Tauri CLI 已经帮我们封装了大量细节。
以下内容基于 Tauri 2.x 稳定版,操作环境建议在 macOS(可以同时构建 iOS 和 Android)或 Linux/Windows(仅 Android)。
1. 环境准备
- Android
需要安装 Android Studio、JDK 17+、Android SDK(API 30 以上)、NDK。设置 ANDROID_HOME 和 JAVA_HOME 环境变量。建议通过 Android Studio 的 SDK Manager 勾选 NDK (Side by side) 和必要的构建工具。
检查命令:rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android。
- iOS
你必须有 macOS 和 Xcode(15 以上),并且登录了 Apple 开发者账号。需要安装 Xcode Command Line Tools。
检查命令:xcode-select --install,然后添加 Rust 目标:rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim。
2. Tauri 移动端项目结构
一个标准 Tauri 移动端项目目录类似:
src-tauri/
src/
Cargo.toml
tauri.conf.json
gen/android/ # Android 原生工程(由 tauri android init 生成)
gen/ios/ # iOS 原生工程(由 tauri ios init 生成)
初始化命令:npx tauri android init 和 npx tauri ios init 会自动生成对应的原生工程目录。你可以直接用 Android Studio 打开 gen/android,用 Xcode 打开 gen/ios,进行进一步的配置和签名。
3. Android 打包与签名
开发模式调试
使用 npx tauri android dev 可以启动开发服务器,编译 Rust 为 Android 动态库,并安装到连接的设备或模拟器上。需要提前创建 AVD 或连接真机并开启 USB 调试。
发布包构建
- 生成未签名的 APK
npx tauri android build --apk 会在 src-tauri/gen/android/app/build/outputs/apk/release/ 下生成 app-release-unsigned.apk。
- 生成 AAB(推荐上架 Google Play)
npx tauri android build --aab 会生成 app-release.aab。
签名配置
默认的 debug key 不能用于发布。你需要在 Android 原生工程中配置签名文件:
- 生成 keystore:
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias
- 将生成的
.jks文件放入src-tauri/gen/android/下。 - 在
src-tauri/gen/android/app/build.gradle.kts中添加签名配置(或创建keystore.properties文件并在build.gradle中引用)。
Tauri 自动生成的项目默认包含从环境变量读取签名配置的占位代码,你可以直接在 android/app/build.gradle.kts 的 signingConfigs 中指定 storeFile, storePassword, keyAlias, keyPassword。
更安全的方式:通过环境变量传入密钥密码,避免在版本控制中硬编码。例如:
signingConfigs {
create("release") {
storeFile = file("my-release-key.jks")
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = "my-key-alias"
keyPassword = System.getenv("KEY_PASSWORD")
}
}
然后在 CI 或本地设置环境变量。
- 再次运行
npx tauri android build --aab,签名会自动包裹进 AAB 中。
4. iOS 打包与签名
开发模式调试npx tauri ios dev 会构建 Rust 库并在模拟器中启动应用。真机调试需要先将 iPhone 连接到 Mac,并在 Xcode 中配置好团队签名。首次运行可能会提示“不受信任的开发者”,需要在设备上手动信任证书。
发布包构建
- 生成归档(Archive):推荐直接用 Xcode 操作,因为 Tauri CLI 对 iOS 发布的支持偏底层。
- 打开
src-tauri/gen/ios/TauriApp.xcodeproj(或你的项目名)。 - 在 Xcode 中,选择目标设备为 “Any iOS Device (arm64)”。
- 菜单栏 Product → Archive,等待编译完成。
- 在 Organizer 窗口中,选择刚生成的 Archive,点击 Distribute App,按提示操作(App Store Connect、Ad Hoc、Enterprise 等)。
- 命令行构建(用于 CI):
npx tauri ios build --scheme "your-scheme" --configuration Release
通常会调用 xcodebuild 完成 archive。还需要用到 exportOptions.plist 指定分发方式。Tauri 官方文档提供了详细模板。
签名管理
iOS 签名分两种模式:
- 自动签名(推荐):在 Xcode 项目设置中勾选 “Automatically manage signing”,选择你的 Team。Xcode 会自动处理证书和 Provisioning Profile。
- 手动签名:适合复杂的企业组织,需在 Apple Developer 后台生成证书和 profile,再在 Build Settings 中指定。
对于 App Store 提审,必须使用 Distribution 证书和 App Store Provisioning Profile。
5. 通用注意事项
- Rust 代码与前端
移动端的 Rust 代码编译为动态库(Android 为 .so,iOS 为 .a),前端资源打包到原生资源目录。所有 Tauri API(如文件系统、通知)在移动端也可以使用,但注意有些 API 在移动端有权限限制,需要在 tauri.conf.json > app > permissions 中声明。
- 图标和启动画面
使用 npx tauri icon icon.png 生成所有平台的图标。Tauri 会自动将图标拷贝到 Android/iOS 工程中。启动画面需要在原生工程中自定义(storyboard 或 splash 资源)。
- 版本号一致性
tauri.conf.json 中的 version 是主版本号,Android 和 iOS 还有自己的 versionCode 和 CFBundleVersion,它们通常从 version 生成,但也可以在 tauri.conf.json > bundle > android > versionCode 和 ios > buildNumber 中显式设置。
- CI/CD
GitHub Actions 可以使用官方 actions 来构建移动端。例如 tauri-apps/tauri-action@v0 支持设置 args: --target android 等。iOS 构建需要 macOS 环境,并且提前注入证书和 provisioning profile(常用 fastlane match)。
6. 发布到应用商店
- Google Play
在 Google Play Console 创建应用,上传签名后的 AAB 文件。注意签名密钥一旦丢失无法找回,务必妥善备份。还可以启用 Google Play App Signing,用 Google 的密钥替换你的上传密钥。
- Apple App Store
通过 Xcode 或 Transporter 上传 Archive 到 App Store Connect。需要填写应用元数据、隐私政策、截图等。首次提交可能需要通过审核,非首次通常 24 小时内完成。
- 测试分发
- Android:可以用 Internal Testing Track 分享链接,无需审核。
- iOS:使用 TestFlight,需要邀请内部或外部测试员,外部测试员需要审核 Beta 版。
以上流程可以覆盖大多数中小型应用的移动端打包和发布场景。Tauri 把 Rust 的原生能力和 Web 前端很好地桥接到了移动端,虽然配置比桌面端多一些,但一旦搭建完成,后续迭代就和桌面端一样顺手。