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>
97 lines
3.6 KiB
Bash
Executable File
97 lines
3.6 KiB
Bash
Executable File
#!/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
|