tauri2-mobile

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Tauri 2 Mobile Development

Tauri 2 移动开发

Build cross-platform mobile apps with Tauri 2 using web technologies (HTML/CSS/JS) for UI and Rust for native backend.
使用Web技术(HTML/CSS/JS)构建UI,结合Rust作为原生后端,通过Tauri 2开发跨平台移动应用。

Quick Reference

快速参考

TaskCommand
Init mobile
npm run tauri android init
/
npm run tauri ios init
Dev Android
npm run tauri android dev
Dev iOS
npm run tauri ios dev
Build APK
npm run tauri android build --apk
Build AAB
npm run tauri android build --aab
Build iOS
npm run tauri ios build
Add plugin
npm run tauri add <plugin-name>
任务命令
初始化移动项目
npm run tauri android init
/
npm run tauri ios init
Android开发调试
npm run tauri android dev
iOS开发调试
npm run tauri ios dev
构建APK
npm run tauri android build --apk
构建AAB
npm run tauri android build --aab
构建iOS应用
npm run tauri ios build
添加插件
npm run tauri add <plugin-name>

Workflow Decision Tree

工作流决策树

New Project Setup

新项目搭建

  1. Read references/setup.md for environment configuration
  2. Run
    npm create tauri-app@latest
    with mobile targets
  3. Configure
    tauri.conf.json
    with app identifier
  1. 阅读references/setup.md配置开发环境
  2. 运行
    npm create tauri-app@latest
    并选择移动目标平台
  3. tauri.conf.json
    中配置应用标识符

Adding Features

添加功能

  • Native functionality: Read references/plugins.md
  • Rust commands/state: Read references/rust-patterns.md
  • Frontend integration: Read references/frontend-patterns.md
  • Authentication/OAuth: Read references/authentication.md
  • In-app purchases: Read references/iap.md
  • 原生功能:阅读references/plugins.md
  • Rust命令/状态管理:阅读references/rust-patterns.md
  • 前端集成:阅读references/frontend-patterns.md
  • 身份验证/OAuth:阅读references/authentication.md
  • 应用内购买:阅读references/iap.md

Testing

测试

  • Emulator/ADB debug: Read references/testing.md
  • Use
    adb logcat | grep -iE "(tauri|RustStdout)"
    for logs
  • 模拟器/ADB调试:阅读references/testing.md
  • 使用
    adb logcat | grep -iE "(tauri|RustStdout)"
    查看日志

Building & Deployment

构建与部署

  • Code signing & stores: Read references/build-deploy.md
  • CI/CD pipelines: Read references/ci-cd.md
  • 代码签名与应用商店发布:阅读references/build-deploy.md
  • CI/CD流水线:阅读references/ci-cd.md

Project Structure

项目结构

my-app/
├── src/                          # Frontend
├── src-tauri/
│   ├── Cargo.toml
│   ├── tauri.conf.json           # Main config
│   ├── src/
│   │   ├── main.rs               # Desktop entry (don't modify)
│   │   └── lib.rs                # Main code + mobile entry
│   ├── capabilities/
│   │   └── default.json          # Permissions
│   └── gen/
│       ├── android/              # Android Studio project
│       └── apple/                # Xcode project
my-app/
├── src/                          # 前端代码
├── src-tauri/
│   ├── Cargo.toml
│   ├── tauri.conf.json           # 主配置文件
│   ├── src/
│   │   ├── main.rs               # 桌面端入口(请勿修改)
│   │   └── lib.rs                # 核心代码 + 移动端入口
│   ├── capabilities/
│   │   └── default.json          # 权限配置
│   └── gen/
│       ├── android/              # Android Studio项目
│       └── apple/                # Xcode项目

Essential Configuration

关键配置

tauri.conf.json

tauri.conf.json

json
{
  "$schema": "https://schema.tauri.app/config/2",
  "productName": "MyApp",
  "identifier": "com.company.myapp",
  "bundle": {
    "iOS": { "minimumSystemVersion": "14.0" },
    "android": { "minSdkVersion": 24 }
  }
}
json
{
  "$schema": "https://schema.tauri.app/config/2",
  "productName": "MyApp",
  "identifier": "com.company.myapp",
  "bundle": {
    "iOS": { "minimumSystemVersion": "14.0" },
    "android": { "minSdkVersion": 24 }
  }
}

capabilities/default.json

capabilities/default.json

json
{
  "identifier": "default",
  "windows": ["main"],
  "permissions": ["core:default"]
}
json
{
  "identifier": "default",
  "windows": ["main"],
  "permissions": ["core:default"]
}

lib.rs (Mobile Entry)

lib.rs(移动端入口)

rust
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_opener::init())
        .plugin(tauri_plugin_deep_link::init())
        .invoke_handler(tauri::generate_handler![greet])
        .run(tauri::generate_context!())
        .expect("error");
}

#[tauri::command]
fn greet(name: &str) -> String {
    format!("Hello, {}!", name)
}
rust
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_opener::init())
        .plugin(tauri_plugin_deep_link::init())
        .invoke_handler(tauri::generate_handler![greet])
        .run(tauri::generate_context!())
        .expect("error");
}

#[tauri::command]
fn greet(name: &str) -> String {
    format!("Hello, {}!", name)
}

Common Issues

常见问题

ProblemSolution
White screenCheck JS console, verify
devUrl
, check capabilities
iOS won't connectUse
--force-ip-prompt
, select IPv6
INSTALL_FAILED_ALREADY_EXISTS
adb uninstall com.your.app
Emulator not detectedVerify
adb devices
, restart ADB
HMR not workingConfigure
vite.config.ts
with
TAURI_DEV_HOST
Shell plugin URL errorUse
opener
plugin instead (
openUrl()
)
Google OAuth failsGoogle blocks WebView; use system browser flow
Deep link not receivedCheck scheme in tauri.conf.json, init plugin
Safe area CSS fails on Android
env()
not supported in WebView; use JS fallback
Windows APK build symlink errorEnable Developer Mode or copy .so files manually
See references/testing.md for detailed troubleshooting.
问题解决方案
白屏检查JS控制台,验证
devUrl
,检查权限配置
iOS无法连接使用
--force-ip-prompt
,选择IPv6
INSTALL_FAILED_ALREADY_EXISTS执行
adb uninstall com.your.app
模拟器未被识别验证
adb devices
输出,重启ADB
HMR不工作
vite.config.ts
中配置
TAURI_DEV_HOST
Shell插件URL错误改用
opener
插件(调用
openUrl()
Google OAuth失败Google屏蔽WebView;使用系统浏览器流程
未接收深度链接检查tauri.conf.json中的scheme配置,初始化对应插件
Android安全区域CSS失效WebView不支持
env()
;使用JS替代方案
Windows下APK构建符号链接错误启用开发者模式或手动复制.so文件
详细故障排除请查看references/testing.md

Resources

资源