tauri-android-tax/doc/构建.md
2026-07-08 18:01:27 +08:00

114 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 构建
在 WSLUbuntu中构建产物为 Android APK。桌面端可用于本地调试。
## 1. 一次性环境准备
### 1.1 基础工具(已具备可跳过)
- Node.js 18+、Rust 1.75+`cargo`)、`rustup`。
- Android 交叉编译目标:
```bash
rustup target add aarch64-linux-android armv7-linux-androideabi \
i686-linux-android x86_64-linux-android
```
### 1.2 桌面调试依赖(仅本地跑 desktop 时需要)
```bash
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
```bash
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_HOME`、`NDK_HOME`、`JAVA_HOME` 写入 `~/.bashrc`
### 1.4 Tauri CLI
```bash
cargo install tauri-cli --version "^2.0"
# 或使用项目本地npm i 后用 npm run tauri
```
## 2. 安装依赖
```bash
cd /mnt/d/workbench/tauri-android-invoice
npm install
```
## 3. 测试
```bash
# 前端纯逻辑测试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. 桌面调试(可选)
```bash
npm run tauri dev
```
## 5. 构建 Android APK
```bash
# 首次初始化 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 年):
```bash
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`
```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
```bash
npm run tauri android build # 生成签名后的 release APK/AAB
```
## 7. 安装到设备
```bash
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` 是否指向真实存在的版本目录。