# Pacer A native Android pacing/metronome app that plays 880 Hz beeps at a user-set BPM to maintain walking pace. Runs in the background for 2+ hour walks without draining battery. Plays alongside other audio apps (podcasts, music) without requesting audio focus. Ported from the web version at https://jeena.net/pacer/ ## Building on Arch Linux ### 1. Install Java 17 ```bash sudo pacman -S jdk17-openjdk ``` Set `JAVA_HOME` (add to `~/.bashrc` or `~/.zshrc`): ```bash export JAVA_HOME=/usr/lib/jvm/java-17-openjdk export PATH="$JAVA_HOME/bin:$PATH" ``` Verify: `java -version` should show `openjdk version "17.x.x"`. ### 2. Install Android SDK via AUR ```bash # Remove old package if previously installed (it leaves files behind — clean them up too) sudo pacman -Rns android-sdk sudo rm -rf /opt/android-sdk/platform-tools /opt/android-sdk/tools # Install modern SDK tools paru -S android-sdk-cmdline-tools-latest android-sdk-platform-tools android-sdk-build-tools android-platform ``` The packages install to `/opt/android-sdk`. Add to `~/.bashrc` or `~/.zshrc`: ```bash export ANDROID_HOME=/opt/android-sdk export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH" ``` Reload: `source ~/.bashrc` ### 3. Accept SDK Licenses ```bash sudo /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses ``` ### 4. Bootstrap the Gradle Wrapper The first time only, install system Gradle to generate the wrapper binary: ```bash sudo pacman -S gradle cd /path/to/Pacer gradle wrapper --gradle-version 8.7 --distribution-type bin sudo pacman -Rs gradle # optional: remove system gradle afterwards ``` ### 5. Build ```bash ./gradlew assembleDebug ``` The debug APK will be at: `app/build/outputs/apk/debug/app-debug.apk` ### 6. Install on a Device Enable USB debugging (Settings > Developer Options > USB Debugging), connect via USB, then: ```bash ./gradlew installDebug # or adb install app/build/outputs/apk/debug/app-debug.apk ``` ## Troubleshooting **`ANDROID_HOME not set`** — Reload your shell profile or open a new terminal. **`License for package ... not accepted`** — Run `sudo /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses`. **`Unsupported class file major version`** — Wrong Java version. Confirm `java -version` shows 17 and `JAVA_HOME` points to `/usr/lib/jvm/java-17-openjdk`. **`Permission denied` on `/opt/android-sdk`** — Run sdkmanager with `sudo`. **`Failed to install build-tools;34.0.0 ... SDK directory is not writable`** — AGP tried to auto-download build-tools instead of using the installed version. Ensure `buildToolsVersion = "36.1.0"` is set in `app/build.gradle.kts`. ## Development See `AGENTS.md` for the developer/agent workflow guide. See `BACKLOG.md` for all user stories and acceptance criteria. ```bash ./gradlew test # unit tests ./gradlew lint # lint checks ```