5.4 Android 工程目录与构建

原文链接: Prerequisites 与 Google Play

5.4 Android 工程目录与构建

Tauri 的 Android 支持不是“用模拟器包个网页”,而是生成一个真正的 Android Studio/Gradle 工程。你的 Rust 代码会被编译成原生 .so 库,由 Kotlin Activity 加载。

一句话流程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
前端静态资源
        │
        ▼
   Rust 编译为 .so(每 ABI 一个)
        │
        ▼
Gradle 把 .so + 资源 + AndroidManifest 打包
        │
        ▼
        APK / AAB

初始化 Android 工程

确保已经完成 2.2 移动端环境配置,然后:

1
npm run tauri android init

之后常见的开发命令:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 在已连接设备或模拟器上运行
npm run tauri android dev

# 打开 Android Studio 调试
npm run tauri android dev --open

# 构建可安装 APK
npm run tauri android build -- --apk

# 构建上架 Google Play 的 AAB
npm run tauri android build -- --aab

使用 Cargo 版 CLI 时对应 cargo tauri android ...,用 pnpm/yarn/bun 时命令前缀略有不同,功能相同。

Android 工程目录

执行 init 后,src-tauri/gen/android/ 内是一个标准 Gradle 多模块工程:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
src-tauri/gen/android/
├── settings.gradle               # 模块与仓库设置
├── build.gradle.kts              # 根构建配置
├── buildSrc/                     # 自定义 Rust Gradle 插件
│   └── src/main/kotlin/
│       ├── RustPlugin.kt
│       └── BuildTask.kt
├── gradle.properties
├── gradlew / gradlew.bat         # Gradle wrapper
├── gradle/wrapper/               # 固定 Gradle 版本
└── app/
    ├── build.gradle.kts          # 应用模块构建配置
    ├── proguard-rules.pro
    └── src/main/
        ├── AndroidManifest.xml   # 应用声明
        ├── MainActivity.kt       # 原生 Activity
        └── res/                  # Android 资源与图标

原生入口 MainActivity.kt

生成的 Kotlin 文件大致如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package com.example.app

import android.os.Bundle
import androidx.activity.enableEdgeToEdge

class MainActivity : TauriActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    // 让界面内容延伸到状态栏后方
    enableEdgeToEdge()
    super.onCreate(savedInstanceState)
  }
}

关键点:

  • 上面的 com.example.app 只是示例,实际生成时会被替换成你在 tauri.conf.json 里填写的 identifier;
  • TauriActivity 是 Tauri 提供的基类,负责创建 WebView、连接 Rust;
  • 你通常不需要在这里写业务代码;
  • 需要原生权限、多窗口或启动参数时,才改动这里或 AndroidManifest.xml。

AndroidManifest.xml 常见改动

1
2
3
4
5
6
7
8
9
<!-- 节选:实际文件会包含完整的 <manifest> 结构 -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 需要系统权限时在这里声明,例如相机、网络、存储 -->
    <uses-permission android:name="android.permission.CAMERA" />

    <application>
        <activity android:name=".MainActivity" />
    </application>
</manifest>

网页里的摄像头/定位等 API 是否可用,还取决于 Android 版本、运行时权限弹窗以及 WebView 是否放行,不只是声明 manifest 这么简单。

Rust 如何被打进去?

app/build.gradle.kts 会应用模板自定义的 rust 插件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("rust")       // Tauri 自定义插件:调用 cargo 构建 .so
}

android {
    namespace = "<你的应用 identifier>"
    defaultConfig {
        applicationId = "<你的应用 identifier>"
        minSdk = 24     // Tauri 最低支持 Android 7.0 (SDK 24)
    }
}

rust {
    rootDirRel = "../../.."   // 从 gen/android/app 指向 src-tauri 的 Cargo 工程
}

Android 专属配置

大部分 Android 构建参数仍通过 tauri.conf.json 控制。例如调整最低系统版本和 versionCode:

1
2
3
4
5
6
7
8
{
  "bundle": {
    "android": {
      "minSdkVersion": 28,
      "versionCode": 100
    }
  }
}

不写 versionCode 时,Tauri 会按主配置中的 version 推导(major * 1000000 + minor * 1000 + patch)。应用商店需要递增 versionCode,正式上架时建议显式配置。

产物目录

构建后,真正有用的文件在 Gradle 的 outputs 下:

1
2
3
4
5
6
7
src-tauri/gen/android/app/build/outputs/
├── apk/
│   └── universal/release/
│       └── app-universal-release.apk
└── bundle/
    └── universalRelease/
        └── app-universal-release.aab

官方文档明确给出的 AAB 路径是:

1
src-tauri/gen/android/app/build/outputs/bundle/universalRelease/app-universal-release.aab

--split-per-abi 可以按架构拆分产物,方便测试,但 Google Play 通常更喜欢上传通用 AAB,由商店自己分发各 ABI。

Android 平台特有问题

  1. 架构选择:默认构建四种 ABI(arm64-v8a、armeabi-v7a、x86_64、x86)。只要联网下载依赖没问题,时间会更久。
  2. 最低版本:Tauri 要求 Android SDK 24(Android 7.0)以上,可在 bundle.android.minSdkVersion 调高。
  3. 16KB 内存页:Google 对新版提交有 16KB 页对齐要求,建议保持 NDK 28+。
  4. 真机调试:在开发者选项中开启 USB 调试。
  5. 图标:重新生成图标用 npm run tauri icon ./app-icon.png,图标会直接放进 gen/android/app/src/main/res/。

下一步

看完 Android,再看苹果系工程 5.5 iOS 工程目录与构建。