#!/usr/bin/env bash # The DEV flavour (ANDROID.md → "Iterating without cargo"): the detour build # WITHOUT tauri's custom-protocol feature, so the library embeds the dev URL # (http://localhost:1421) instead of dist/. On the phone, `adb reverse` makes # the phone's localhost:1421 THIS machine's Vite dev server over the USB # cable — no LAN address, no firewall hole, hot reload — and cargo runs only # when Rust changes. Both flavours share target/: switching flavours # recompiles tauri and the app crate once (~3 min), the leaf crates stay # fresh — cheaper than a second 15 GB cache on this drive. # # bash src-tauri/android/dev.sh # build (when Rust changed) + install + tunnel + launch # bash src-tauri/android/dev.sh --no-build # reinstall the last dev library, re-tunnel, launch # bash src-tauri/android/dev.sh --build-only # just the library (the phone is busy or absent) # bash src-tauri/android/deploy.sh # the embedded build again (what the phone keeps) # # Then start the "frontend" dev server (npm run dev / the Browser pane's # "frontend" launch config). The phone needs it running — and the cable. set -euo pipefail cd /f/Coding/SoulStream export MSYS_NO_PATHCONV=1 source src-tauri/android/env.sh if [ "${1:-}" != "--no-build" ]; then echo "== cargo (dev flavour) $(date +%T)" cargo build --lib -p app --target aarch64-linux-android 2>&1 | grep -v "^\s*Compiling\|^\s*Fresh" test "${PIPESTATUS[0]}" -eq 0 || { echo "cargo failed — not packaging"; exit 1; } [ "${1:-}" = "--build-only" ] && { echo "== built $(date +%T)"; exit 0; } fi SO=target/aarch64-linux-android/debug/libapp_lib.so test -f "$SO" || { echo "no dev .so built"; exit 1; } echo "== strip $(date +%T)" DEST=src-tauri/gen/android/app/src/main/jniLibs/arm64-v8a mkdir -p "$DEST" cp "$SO" "$DEST/libapp_lib.so" "$BIN/llvm-strip.exe" --strip-debug "$DEST/libapp_lib.so" echo "== gradle $(date +%T)" cd src-tauri/gen/android ./gradlew.bat assembleArm64Debug -x rustBuildArm64Debug -q 2>&1 | grep -v "^$" | tail -20 || true cd /f/Coding/SoulStream APK=src-tauri/gen/android/app/build/outputs/apk/arm64/debug/app-arm64-debug.apk echo "== install $(date +%T)" "$ADB" install -r "$APK" 2>&1 | tail -1 "$ADB" shell pm grant com.soulstream.app android.permission.POST_NOTIFICATIONS 2>/dev/null || true # the tunnel: the phone's localhost:1421 → this machine's 1421 (Vite) "$ADB" reverse tcp:1421 tcp:1421 "$ADB" shell am force-stop com.soulstream.app FOCUS=$("$ADB" shell dumpsys window 2>/dev/null | grep -a "mCurrentFocus" | head -1) if echo "$FOCUS" | grep -qi "soulstream\|launcher"; then "$ADB" shell am start -n com.soulstream.app/.MainActivity >/dev/null echo "== launched $(date +%T) — serve the frontend on 1421 (npm run dev) if it is not up" else echo "== installed; not launched (the phone is in use: $FOCUS)" fi