返回文章列表

Tauri 怎么编译成安卓安装包?这篇从 init 到 AAB 一次讲透

688·5 分钟阅读
TauriAndroid移动端构建发布

最近有个读者留言:Tauri 怎么编译成安卓安装包?网上搜了一圈,资料要么过时,要么零散,官方文档又写得像参考手册。能不能搞个从 0 到 1 跑通的教程?

这篇文章就是冲着这个来的。我不打算把官方文档搬运一遍,而是把真实走通的链路、踩过的坑、容易忽略的细节,一次性讲清楚。

先说结论

如果你现在要把 Tauri 项目编译成 Android 安装包,请直接用 Tauri 2

Tauri 2 提供了三个核心命令:

cargo tauri android init    # 生成 Android 原生工程
cargo tauri android dev     # 开发模式跑在手机上
cargo tauri android build   # 打 APK 或 AAB

整个流程可以浓缩成一句话:

Tauri 2 先帮你生成一套 Android 工程,然后走标准的 Android 构建链路,产出 APK 或 AAB。

这也是为什么旧文章越看越乱 —— 很多在讲 Tauri 1 的方案、早期 mobile 实验、或者已过时的命令。做 Android,直接走 Tauri 2 就对了。


先搞清楚:APK 和 AAB 的区别

这个概念不复杂,但很多人搞混:

格式 用途 特点
APK 真机测试、内测分发 拿到手直接装
AAB 上传 Google Play Play 会针对不同设备生成优化包

一句话记住:

测试用 APK,上架用 AAB。


环境准备:最容易翻车的地方

说实话,Tauri 打 Android 包,难的不是命令本身,而是环境

很多人构建失败,排查一圈发现不是 Tauri 的问题,是 Android 开发环境没配完整。下面按顺序过一遍。

你至少需要这些东西

  • Rust + Cargo
  • Node.js 18+(pnpm 也行)
  • Android Studio
  • Android SDK + NDK(NDK 是关键,别漏
  • Platform Tools + Command-line Tools
  • Java(Android Studio 自带的 JBR 就行)

安装 Rust 和 Node.js

如果你已经有,跳过。没有的话:

# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
 
# 验证
rustc --version
cargo --version

Node.js 建议 LTS 18+,装好后 node -v 确认一下。

安装 Android Studio

去官网下载:https://developer.android.com/studio

装好后打开 SDK Manager,确保这几个组件都装了:

  • Android SDK Platform
  • Android SDK Platform-Tools
  • Android SDK Command-line Tools
  • NDK (Side by side)

⚠️ NDK 是 Rust 交叉编译到 Android 的前提。 只装 SDK 没装 NDK,后面 Rust 编译 Android target 时大概率直接报 linker 错误。

配置环境变量

这是第二容易卡住的地方。你需要配这几个变量:

macOS(写到 ~/.zshrc):

export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
export ANDROID_HOME="$HOME/Library/Android/sdk"
export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/29.0.14206865"
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"

Linux(写到 ~/.bashrc~/.zshrc):

export JAVA_HOME="/opt/android-studio/jbr"
export ANDROID_HOME="$HOME/Android/Sdk"
export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/29.0.14206865"
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"

Windows: 逻辑一样,通过系统环境变量界面配置,常见路径:

JAVA_HOME=C:\Program Files\Android\Android Studio\jbr
ANDROID_HOME=C:\Users\你的用户名\AppData\Local\Android\Sdk

配完后验证:

java -version
adb --version

两个都能跑通,说明环境基本没问题。

💡 小提示: NDK_HOME 的版本号(上面示例里的 29.0.14206865)要和你实际安装的 NDK 版本一致。不确定的话,ls $ANDROID_HOME/ndk/ 看一下。

安装 Rust 的 Android target

rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android

第一次建议装全。只想测主流 ARM64 设备的话,只装 aarch64-linux-android 也行。

确保 Tauri CLI 可用

# npm
npm install -D @tauri-apps/cli@latest
 
# pnpm
pnpm add -D @tauri-apps/cli@latest
 
# 验证
npx tauri -V

如果输出是 2.x,环境就绑了。


初始化 Android 工程

进入你的 Tauri 项目根目录:

cargo tauri android init

这一步的本质是:给你的 Tauri 项目生成一套 Android 原生工程。 后续的 APK、AAB,全是在这套工程基础上构建的。

这不是可选项,是 Android 打包链路的真正起点。

生成的 Android 工程在 src-tauri/gen/android/ 下面,你可以用 Android Studio 直接打开看它的结构。


关键建议:先跑 dev,再 build

很多人一上来就直接 cargo tauri android build,然后遇到一堆 Gradle 错误、链接错误,根本分不清哪一层出了问题。

更聪明的做法是:

cargo tauri android dev    # 先跑通开发模式
# 确认没问题后
cargo tauri android build  # 再打正式包

dev 能跑通,基本说明这些链路都没问题:

  • Java ✅
  • Android SDK ✅
  • Android NDK ✅
  • Rust Android target ✅
  • Tauri Android 工程初始化 ✅
  • 前端构建链路 ✅

如果 Android 打包有一步最关键,那就是先把 dev 跑起来。

连真机还是用模拟器?

真机调试:

手机上打开「开发者选项 → USB 调试」,连上电脑,执行:

adb devices

能看到设备序列号就说明连上了。

模拟器:

在 Android Studio 的 Device Manager 里创建并启动一个模拟器,同样 adb devices 确认在线。

两个都行,哪个方便用哪个。


打 APK:测试分发用

dev 跑通后,打测试安装包:

cargo tauri android build --apk

想指定架构?

默认会为多个 Android 架构构建。只想打主流 ARM64:

cargo tauri android build --apk --target aarch64

想按架构拆分 APK(减小体积、线下分发时用):

cargo tauri android build --apk --split-per-abi

第一次尝试?用默认配置就够了。

产物在哪?

构建完成后终端会输出路径。如果想自己找:

find . -iname "*.apk"

一般在 src-tauri/gen/android/app/build/outputs/ 下面。

装到手机上

adb install -r /你的/apk/路径/app-release.apk

-r 是覆盖安装。如果报错,常见原因:

  • 手机上已有同包名但签名不同的应用
  • 安装包未签名
  • Android 版本低于最低支持版本

打 AAB:上架 Google Play 用

cargo tauri android build --aab

产物路径类似:

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

版本号怎么配?

Tauri 从 tauri.conf.json 读取版本信息:

{
  "version": "1.2.3",
  "bundle": {
    "android": {
      "versionCode": 100,
      "minSdkVersion": 24
    }
  }
}

三个关键字段:

字段 含义 注意事项
version 用户看到的版本号 1.2.3
versionCode Android 内部版本号 每次上架必须递增
minSdkVersion 最低支持 Android 版本 不确定就别乱改,用默认值

发布前必做:签名配置

很多教程在这一步一笔带过,但它其实是上架前最关键的一环

无论你打的是 APK 还是 AAB,只要分发或上架,都需要签名

第 1 步:生成 keystore

keytool -genkey -v \
  -keystore ~/upload-keystore.jks \
  -keyalg RSA -keysize 2048 \
  -validity 10000 \
  -alias upload

执行过程中会让你填密码和组织信息。完成后你会得到 upload-keystore.jks 文件。

⚠️ 这个文件千万别提交到公开仓库,也别随手删了。 后续每次更新上架都要用同一个 keystore,丢了就等于丢了应用的发布身份。

第 2 步:创建 keystore.properties

src-tauri/gen/android/ 下创建 keystore.properties

password=你的密码
keyAlias=upload
storeFile=/你的绝对路径/upload-keystore.jks

同样加入 .gitignore,别提交。

第 3 步:修改 build.gradle.kts

编辑 src-tauri/gen/android/app/build.gradle.kts

首先,在文件顶部加上 import:

import java.io.FileInputStream
import java.util.Properties

然后,添加 release 签名配置:

signingConfigs {
    create("release") {
        val keystorePropertiesFile = rootProject.file("keystore.properties")
        val keystoreProperties = Properties()
        if (keystorePropertiesFile.exists()) {
            keystoreProperties.load(FileInputStream(keystorePropertiesFile))
        }
 
        keyAlias = keystoreProperties["keyAlias"] as String
        keyPassword = keystoreProperties["password"] as String
        storeFile = file(keystoreProperties["storeFile"] as String)
        storePassword = keystoreProperties["password"] as String
    }
}

最后,在 release buildType 里挂上签名:

buildTypes {
    getByName("release") {
        signingConfig = signingConfigs.getByName("release")
    }
}

这样配完后,release 构建会自动带上签名。


最推荐的实战顺序

如果你是第一次做,按这个顺序走最稳:

# 1. 确认版本
cargo tauri -V                    # 确认是 Tauri 2
 
# 2. 装好 Android Studio + SDK/NDK,配好环境变量
java -version && adb --version    # 确认环境正常
 
# 3. 给 Rust 装 Android targets
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
 
# 4. 初始化 Android 工程
cargo tauri android init
 
# 5. 连设备,确认能看到
adb devices
 
# 6. 跑通开发模式
cargo tauri android dev
 
# 7. 打测试 APK
cargo tauri android build --apk
 
# 8. 配签名(.jks + keystore.properties + build.gradle.kts)
 
# 9. 打正式 AAB
cargo tauri android build --aab

核心就 4 件事:配环境、init、dev、build。命令本身不复杂,翻车的都是环境和签名。


常见踩坑总结

1. 还在用 Tauri 1

旧项目、旧教程、旧博客,很可能还在 Tauri 1 的方案里打转。做 Android 直接用 Tauri 2。

2. 没装 NDK

症状:linker 找不到、target 编译失败、Gradle 报错但根因其实在 Rust 构建链路。

检查: ls $ANDROID_HOME/ndk/,确认目录里有东西。

3. JAVA_HOME 配错

系统里装了多个 Java,Gradle 用了不合适的那个。

稳妥做法:JAVA_HOME 指向 Android Studio 自带的 JBR,别用系统的 Java。

4. 桌面端插件不代表 Android 可用

有些 Tauri 插件桌面端支持很好,但 Android 端没有实现或者能力不完整。打 Android 前,最好逐个确认你用的插件是否支持 mobile。

5. 以为 APK 就能上架

Google Play 更推荐 AAB,而且还有包名规范、版本号规范、签名、上架资料等一系列要求。APK 更像测试产物,AAB 才是正式上架的产物。


一组最小可用命令

如果你只想快速过一遍,记这组就行:

# 装 targets
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
 
# 初始化
cargo tauri android init
 
# 看设备
adb devices
 
# 开发模式
cargo tauri android dev
 
# 打 APK
cargo tauri android build --apk
 
# 打 AAB
cargo tauri android build --aab

参考资料