pacer/README.md
Jeena 2b3feb4e9a chore: License the project under GPL-3.0-or-later
In preparation for publishing the source publicly: without a license
file the code would default to all-rights-reserved, so nobody could
legally use or modify it. Add the GPL v3 text, a license section in
the README, and REUSE-style SPDX headers in every Kotlin source and
Gradle build script so per-file licensing is machine-readable.

The bundled JetBrains Mono font stays under its own SIL Open Font
License 1.1, whose text must accompany redistribution. OFL.txt lives
at the repo root rather than next to the fonts because aapt rejects
non-font files in res/font.
2026-06-10 15:29:51 +00:00

112 lines
3.1 KiB
Markdown

# 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
```
## License
Pacer is free software, licensed under the GNU General Public License,
version 3 or (at your option) any later version. See [LICENSE](LICENSE).
The bundled [JetBrains Mono](https://github.com/JetBrains/JetBrainsMono) font
is licensed under the SIL Open Font License 1.1. See [OFL.txt](OFL.txt).