Phase 1: wrap the reference web app in Capacitor for Android
Wraps reference/sp404-layers as a sideloadable APK without editing the reference, which stays the frozen spec for the Phase 2 React port. - sync-www.sh builds www/ from reference/ + native/, asserting each patch anchor so a reference change fails loudly rather than shipping broken - drops the service worker (would serve a stale app after an APK update) - haptics via a navigator.vibrate override, so buzz() needs no change - localStorage mirrored into Preferences; sync load()/save() untouched - hardware back: sheet -> Explore tab -> exit - edge-to-edge handled in MainActivity: Android 16 + targetSdk 36 removes the opt-out, and a WebView never fills env(safe-area-inset-*), so insets are pushed into CSS custom properties instead Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
96
scripts/install-android-toolchain.sh
Executable file
96
scripts/install-android-toolchain.sh
Executable file
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env bash
|
||||
# Installs the Android toolchain needed to build a Capacitor APK on Pop!_OS 24.04.
|
||||
# Headless: JDK 21 + cmdline-tools + platform-tools (adb). No Android Studio.
|
||||
# Idempotent - safe to re-run.
|
||||
set -euo pipefail
|
||||
|
||||
# Versions below are verified against Capacitor 8.5.2's capacitor/build.gradle
|
||||
# (compileSdk 36, targetSdk 36, minSdk 24, Java 21) - do not bump blind.
|
||||
SDK_ROOT="${ANDROID_HOME:-$HOME/Android/Sdk}"
|
||||
CMDLINE_BUILD="15859902" # newest per developer.android.com/studio
|
||||
BUILD_TOOLS="36.1.0" # pairs with compileSdk 36
|
||||
SHELL_RC="$HOME/.zshrc"
|
||||
MARKER="# >>> android sdk (sp404-layers) >>>"
|
||||
|
||||
[ "$(id -u)" -ne 0 ] || { echo "Run as your normal user, not root. It will sudo when needed."; exit 1; }
|
||||
|
||||
echo "==> 1/6 apt packages (needs sudo)"
|
||||
sudo apt-get update -qq
|
||||
# android-sdk-platform-tools-common ships the udev rules that let adb see the phone.
|
||||
sudo apt-get install -y openjdk-21-jdk android-sdk-platform-tools-common unzip curl
|
||||
|
||||
echo "==> 2/6 command-line tools -> $SDK_ROOT"
|
||||
if [ ! -x "$SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" ]; then
|
||||
tmp="$(mktemp -d)"; trap 'rm -rf "$tmp"' EXIT
|
||||
url="https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_BUILD}_latest.zip"
|
||||
echo " downloading $url"
|
||||
curl -fL --progress-bar -o "$tmp/cmdline.zip" "$url"
|
||||
unzip -q "$tmp/cmdline.zip" -d "$tmp"
|
||||
mkdir -p "$SDK_ROOT/cmdline-tools"
|
||||
rm -rf "$SDK_ROOT/cmdline-tools/latest"
|
||||
# the zip unpacks to cmdline-tools/, sdkmanager insists on being at cmdline-tools/latest/
|
||||
mv "$tmp/cmdline-tools" "$SDK_ROOT/cmdline-tools/latest"
|
||||
else
|
||||
echo " already present, skipping"
|
||||
fi
|
||||
|
||||
# Derive JAVA_HOME from the javac we just installed rather than hardcoding a path.
|
||||
JAVA_HOME="$(dirname "$(dirname "$(readlink -f "$(command -v javac)")")")"
|
||||
[ -x "$JAVA_HOME/bin/javac" ] || { echo "Could not locate JAVA_HOME (got '$JAVA_HOME')"; exit 1; }
|
||||
case "$("$JAVA_HOME/bin/javac" -version 2>&1)" in
|
||||
*"javac 21."*) : ;;
|
||||
*) echo "WARNING: Capacitor 8 wants Java 21, found: $("$JAVA_HOME/bin/javac" -version 2>&1)" ;;
|
||||
esac
|
||||
export JAVA_HOME
|
||||
export ANDROID_HOME="$SDK_ROOT"
|
||||
export ANDROID_SDK_ROOT="$SDK_ROOT"
|
||||
export PATH="$SDK_ROOT/cmdline-tools/latest/bin:$SDK_ROOT/platform-tools:$JAVA_HOME/bin:$PATH"
|
||||
|
||||
echo "==> 3/6 accepting SDK licenses"
|
||||
yes 2>/dev/null | sdkmanager --licenses >/dev/null || true
|
||||
|
||||
echo "==> 4/6 SDK packages (this is the slow part, ~1-2 GB)"
|
||||
sdkmanager --install \
|
||||
"platform-tools" \
|
||||
"platforms;android-35" \
|
||||
"platforms;android-36" \
|
||||
"build-tools;${BUILD_TOOLS}"
|
||||
|
||||
echo "==> 5/6 persisting env to $SHELL_RC"
|
||||
if ! grep -qF "$MARKER" "$SHELL_RC" 2>/dev/null; then
|
||||
cat >> "$SHELL_RC" <<EOF
|
||||
|
||||
$MARKER
|
||||
export JAVA_HOME=$JAVA_HOME
|
||||
export ANDROID_HOME=$SDK_ROOT
|
||||
export ANDROID_SDK_ROOT=$SDK_ROOT
|
||||
export PATH=\$ANDROID_HOME/cmdline-tools/latest/bin:\$ANDROID_HOME/platform-tools:\$JAVA_HOME/bin:\$PATH
|
||||
# <<< android sdk (sp404-layers) <<<
|
||||
EOF
|
||||
echo " added"
|
||||
else
|
||||
echo " already there, skipping"
|
||||
fi
|
||||
|
||||
echo "==> 6/6 usb device access"
|
||||
if ! id -nG "$USER" | grep -qw plugdev; then
|
||||
sudo usermod -aG plugdev "$USER"
|
||||
echo " added $USER to plugdev - LOG OUT AND BACK IN for this to take effect"
|
||||
else
|
||||
echo " already in plugdev"
|
||||
fi
|
||||
sudo udevadm control --reload-rules && sudo udevadm trigger || true
|
||||
|
||||
cat <<'EOF'
|
||||
|
||||
------------------------------------------------------------
|
||||
Done. Open a NEW terminal, then verify:
|
||||
|
||||
java -version # expect 21.x
|
||||
sdkmanager --list_installed
|
||||
adb devices # plug the phone in, tap "Allow USB debugging"
|
||||
|
||||
If adb shows "no permissions" or nothing, log out and back in
|
||||
(the plugdev group change needs a fresh session).
|
||||
------------------------------------------------------------
|
||||
EOF
|
||||
Reference in New Issue
Block a user