All checks were successful
Docker Build and Push / build-image (push) Successful in 3m16s
85 lines
2.6 KiB
Bash
85 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
# iBoard Android APK 打包
|
|
# 用法: bash scripts/wsl/build-apk.sh [debug|release]
|
|
set -euo pipefail
|
|
|
|
WIN_PROJECT='/mnt/d/workbench/iboard'
|
|
cd "$WIN_PROJECT"
|
|
|
|
VARIANT="${1:-debug}"
|
|
echo "构建变体: $VARIANT"
|
|
|
|
# 环境变量
|
|
export ANDROID_HOME="${ANDROID_HOME:-$HOME/android-sdk}"
|
|
export ANDROID_NDK_HOME="${ANDROID_NDK_HOME:-$ANDROID_HOME/ndk/27.2.12479018}"
|
|
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$HOME/.cargo/bin:$PATH"
|
|
|
|
# 0. 首次需要 android 工程
|
|
cd src-tauri
|
|
if [ ! -d "gen/android" ]; then
|
|
echo "=== 0. 初始化 Android 工程 (一次性) ==="
|
|
npx tauri android init
|
|
fi
|
|
cd "$WIN_PROJECT"
|
|
|
|
# 1. 先构建前端, 让 Tauri android 工程能拿到 dist/
|
|
echo "=== 1. 构建前端 ==="
|
|
npm run build
|
|
|
|
# 2. 走不同路径
|
|
cd src-tauri
|
|
|
|
# 全部 4 个 Android 架构的 rustBuild 任务 (Tauri 2 默认会编 4 个)
|
|
RUST_BUILD_TASKS=(
|
|
":app:rustBuildArm64Release"
|
|
":app:rustBuildArmv7Release"
|
|
":app:rustBuildX86_64Release"
|
|
":app:rustBuildI686Release"
|
|
)
|
|
RUST_BUILD_TASKS_DBG=(
|
|
":app:rustBuildArm64Debug"
|
|
":app:rustBuildArmv7Debug"
|
|
":app:rustBuildX86_64Debug"
|
|
":app:rustBuildI686Debug"
|
|
)
|
|
SKIP_ARGS=()
|
|
for t in "${RUST_BUILD_TASKS[@]}"; do SKIP_ARGS+=(-x "${t#:}"); done
|
|
|
|
if [ "$VARIANT" = "release" ]; then
|
|
echo "[release] 手工 cargo 编 lib, gradle 只跑 packaging (跳过 rustBuild* 避免 --release 重复 bug)"
|
|
|
|
echo " [cargo] build lib release ..."
|
|
cargo build \
|
|
--target aarch64-linux-android \
|
|
--features custom-protocol \
|
|
--lib \
|
|
--release
|
|
|
|
echo " [gradle] assembleRelease -x rustBuild* ..."
|
|
cd gen/android
|
|
./gradlew --no-daemon assembleRelease "${SKIP_ARGS[@]}"
|
|
|
|
APK_DIR="$WIN_PROJECT/src-tauri/gen/android/app/build/outputs/apk/release"
|
|
echo
|
|
echo "=== 产物 (未签名) ==="
|
|
ls -lh "$APK_DIR"/*.apk 2>/dev/null || echo "(未找到 APK)"
|
|
|
|
echo
|
|
echo "=== Release 签名 (按需) ==="
|
|
echo "1. 生成 keystore (一次性):"
|
|
echo " keytool -genkey -v -keystore ~/iboard-release.keystore -alias iboard -keyalg RSA -keysize 2048 -validity 10000"
|
|
echo "2. 在 ~/.gradle/gradle.properties 写:"
|
|
echo " IBOARD_UPLOAD_STORE_FILE=/home/$(whoami)/iboard-release.keystore"
|
|
echo " IBOARD_UPLOAD_KEY_ALIAS=iboard"
|
|
echo " IBOARD_UPLOAD_STORE_PASSWORD=..."
|
|
echo " IBOARD_UPLOAD_KEY_PASSWORD=..."
|
|
echo "3. 重跑本脚本"
|
|
else
|
|
echo "[debug] Tauri CLI debug 路径 (不传 --release 不会触发 bug), 直接走"
|
|
npx tauri android build --apk
|
|
|
|
APK_DIR="$WIN_PROJECT/src-tauri/target/debug/bundle/android/app/build/outputs/apk/debug"
|
|
echo
|
|
echo "=== 产物 ==="
|
|
ls -lh "$APK_DIR"/*.apk 2>/dev/null || echo "(未找到 APK)"
|
|
fi |