# 构建 在 WSL(Ubuntu)中构建,产物为 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-3,Rust 2-1~2-5(数据库)、3-1~3-3(AI 解析)。 ## 4. 桌面调试(可选) ```bash npm run tauri dev ``` ## 5. 构建 Android APK ```bash # 首次初始化 Android 工程(生成 src-tauri/gen/android) npm run tauri android init # 构建 APK(debug) 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//invoice-release.jks storePassword=你的keystore口令 keyAlias=invoice keyPassword=你的密钥口令 ``` 确认 `src-tauri/gen/android/app/build.gradle.kts` 读取该文件并应用到 `release` signingConfig(Tauri 模板通常已生成,如无则手动补充)。 > 安全提示:`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` 是否指向真实存在的版本目录。