android: add Tauri v2 shell with GPS tracking for cardio workouts

Wraps the web app in a Tauri Android shell that provides native GPS
via the geolocation plugin. Includes foreground service for background
tracking, live map display, GPS data storage in workout sessions,
and route visualization in workout history.
This commit is contained in:
2026-03-20 11:18:53 +01:00
parent 08bd016404
commit 748537dc74
51 changed files with 5695 additions and 8 deletions

78
scripts/android-build-deploy.sh Executable file
View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
set -euo pipefail
# Android SDK environment
export ANDROID_HOME=/opt/android-sdk
export NDK_HOME=/opt/android-sdk/ndk/27.0.12077973
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk
APK_DIR="src-tauri/gen/android/app/build/outputs/apk/universal/release"
APK_UNSIGNED="$APK_DIR/app-universal-release-unsigned.apk"
APK_SIGNED="$APK_DIR/app-universal-release-signed.apk"
KEYSTORE="src-tauri/debug.keystore"
PACKAGE="org.bocken.fitness"
usage() {
echo "Usage: $0 [build|deploy|run]"
echo " build - Build and sign the APK"
echo " deploy - Build + install on connected device"
echo " run - Build + install + launch on device"
exit 1
}
ensure_keystore() {
if [ ! -f "$KEYSTORE" ]; then
echo ":: Generating debug keystore..."
keytool -genkey -v -keystore "$KEYSTORE" \
-alias debug -keyalg RSA -keysize 2048 -validity 10000 \
-storepass android -keypass android \
-dname "CN=Debug,O=Bocken,C=DE"
fi
}
build() {
echo ":: Building Android APK..."
npx tauri android build --apk
ensure_keystore
echo ":: Signing APK..."
# zipalign
"$ANDROID_HOME/build-tools/35.0.0/zipalign" -f -v 4 \
"$APK_UNSIGNED" "$APK_SIGNED" > /dev/null
# sign with apksigner
"$ANDROID_HOME/build-tools/35.0.0/apksigner" sign \
--ks "$KEYSTORE" --ks-pass pass:android --key-pass pass:android \
"$APK_SIGNED"
echo ":: Signed APK at: $APK_SIGNED"
}
deploy() {
if ! adb devices | grep -q "device$"; then
echo "!! No device connected. Connect your phone and enable USB debugging."
exit 1
fi
build
echo ":: Installing APK on device..."
adb install -r "$APK_SIGNED"
echo ":: Installed successfully."
}
run() {
deploy
echo ":: Launching app..."
adb shell am start -n "$PACKAGE/.MainActivity"
echo ":: App launched."
}
case "${1:-}" in
build) build ;;
deploy) deploy ;;
run) run ;;
*) usage ;;
esac