deploy.sh and dev.sh both ask which app is on screen with `echo "$FOCUS" | grep -qi`, under the same `set -o pipefail`. $FOCUS is one line, so echo has always finished writing before grep -q exits and the race has never been lost — but it is the identical shape that made verify-icon.sh report a missing file in an APK that contained it. Herestrings, so there is no writer to kill.
65 lines
3.6 KiB
Bash
65 lines
3.6 KiB
Bash
#!/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"
|
|
# The launcher identity, into a project that cannot keep it: gen/android is
|
|
# regenerated by the tauri CLI and gitignored, and the detour build never runs
|
|
# that CLI, so the res it holds is still the one `android init` wrote — tauri's
|
|
# own logo. Everything under src-tauri/android/res/ is copied over it on every
|
|
# build. The whole tree, not a file list: a later round adding a resource adds
|
|
# a file there and this line does not change.
|
|
echo "== res overlay $(date +%T)"
|
|
test -d src-tauri/android/res || { echo "src-tauri/android/res is gone — the APK would wear tauri's logo and say nothing"; exit 1; }
|
|
cp -r src-tauri/android/res/. src-tauri/gen/android/app/src/main/res/
|
|
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
|
|
bash src-tauri/android/verify-icon.sh "$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)
|
|
# herestring, for the reason spelled out in deploy.sh beside the same test
|
|
if grep -qi "soulstream\|launcher" <<< "$FOCUS"; 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
|