tauri-android-tax/doc/构建.md
2026-07-09 20:03:35 +08:00

5.4 KiB
Raw Blame History

构建

在 WSLUbuntu中构建产物为 Android APK。桌面端可用于本地调试。

1. 一次性环境准备

1.1 基础工具(已具备可跳过)

  • Node.js 18+、Rust 1.75+cargo)、rustup
  • Android 交叉编译目标:
    rustup target add aarch64-linux-android armv7-linux-androideabi \
                      i686-linux-android x86_64-linux-android
    

1.2 桌面调试依赖(仅本地跑 desktop 时需要)

sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev \
    libsoup-3.0-dev librsvg2-dev libjavascriptcoregtk-4.1-dev pkg-config

AI 请求用 rustls不依赖系统 OpenSSL。

1.3 Android SDK / NDK / JDK

sudo apt-get install -y openjdk-17-jdk
# 下载 commandline-tools 到 ~/android-sdk然后
export ANDROID_HOME=$HOME/android-sdk
export NDK_HOME=$ANDROID_HOME/ndk/26.1.10909125   # 版本以实际为准
sdkmanager "platform-tools" "platforms;android-34" \
           "build-tools;34.0.0" "ndk;26.1.10909125"

建议把 ANDROID_HOMENDK_HOMEJAVA_HOME 写入 ~/.bashrc

1.4 Tauri CLI

cargo install tauri-cli --version "^2.0"
# 或使用项目本地npm i 后用 npm run tauri

2. 安装依赖

cd /mnt/d/workbench/tauri-android-invoice
npm install

3. 测试

# 前端纯逻辑测试autofill
npm test
# Rust 逻辑测试db + ai 解析)
cd src-tauri && cargo test --lib

当前用例:前端 1-1~1-3Rust 2-1~2-5数据库、3-1~3-3AI 解析)。

4. 桌面调试(可选)

npm run tauri dev

5. 构建 Android APK

# 首次初始化 Android 工程(生成 src-tauri/gen/android
npm run tauri android init

# 构建 APKdebug
npm run tauri android build --debug
# 或 release需配置签名
npm run tauri android build

产物路径:

src-tauri/gen/android/app/build/outputs/apk/

6. 生成签名密钥release 必需)

debug 构建自动用调试签名release 必须自备 keystore。

6.1 生成 keystore

用 JDK 自带的 keytool 生成(有效期约 27 年):

keytool -genkeypair -v \
  -keystore ~/invoice-release.jks \
  -alias invoice \
  -keyalg RSA -keysize 2048 -validity 10000

按提示设置 keystore 口令、密钥口令与证书信息,妥善保管该文件与口令(丢失将无法更新已上架应用)。

6.2 配置签名给 Gradle

src-tauri/gen/android/(执行过 android init 后生成)创建 keystore.properties

storeFile=/home/<user>/invoice-release.jks
storePassword=你的keystore口令
keyAlias=invoice
keyPassword=你的密钥口令

确认 src-tauri/gen/android/app/build.gradle.kts 读取该文件并应用到 release signingConfigTauri 模板通常已生成,如无则手动补充)。

安全提示:keystore.properties*.jks 含机密,务必加入 .gitignore,不要提交。

6.3 构建已签名 release

npm run tauri android build   # 生成签名后的 release APK/AAB

7. 安装到设备

adb install -r <上面生成的 apk 路径>

8. 常见问题

  • 缺少 gobject-2.0/openssl.pc:补装 1.2 的桌面依赖(仅桌面构建需要)。
  • 扫码权限报 barcode-scanner:allow-scan not found:该权限只在移动端,已放入 src-tauri/capabilities/mobile.json,桌面构建不加载。
  • 图标缺失导致 generate_context! 失败:确认 src-tauri/icons/icon.png 存在,可用 npm run tauri icon <源图> 生成全套。
  • NDK 找不到:检查 NDK_HOME 是否指向真实存在的版本目录。

9. Windows 本地工具链(通过 mise 安装)

本仓库根目录的 mise.toml 固定了 Android 构建所需的工具链,均通过 mise 管理。

安装步骤:

mise install                 # 安装 java(temurin-17) + rust(1.89)
mise trust                   # 首次需信任本目录的 mise.toml 以启用环境变量

工具链清单:

  • JDK 17java = "temurin-17"Android/Gradle 需要 17+。
  • Rust 1.89rust = "1.89"),并已 rustup target add 四个 Android 目标 aarch64/armv7/i686/x86_64-linux-android
  • Android SDK 安装在 D:\android-sdk(平台 android-34、build-tools 34.0.0、 platform-tools、NDK 27.2.12479018、emulator + system-images;android-34;google_apis;x86_64。 通过 mise.toml[env] 注入 ANDROID_HOME / NDK_HOME 及 PATH。
  • 模拟器 AVDtauri_testPixel 6Android 14。启动emulator -avd tauri_test

说明Windows 上 mise 的 vfox android-sdk 插件校验会失败,且 C 盘空间紧张, 因此 SDK 手动安装到 D 盘并用环境变量接入JDK 因 GitHub 发布 CDN 在本网络不可达, 改用清华镜像下载后由 mise 离线安装(MISE_PREFER_OFFLINE=1)。

已知问题360 安全卫士拦截构建

本机安装了 360 安全卫士ZhuDongFangYu 主动防御)。它会拦截 cargo 新编译出的 build-script 可执行文件的运行,导致 cargo build拒绝访问 (os error 5) 或卡死。 构建 Android 前需临时退出 360 主动防御,或将本仓库与 ~/.cargo~/.rustup 加入信任白名单。

前端测试

npm test        # 含 autofill 与 qrscan二维码解码用例
node tests/fixtures/generate-qr.mjs   # 生成一张测试二维码图片 tests/fixtures/sample-qr.png