claude 923f58420d
Some checks failed
release / build-release (push) Failing after 13m22s
CI: vägra bygga APK på arm64/Pi5 — spärr först i jobbet
Bygget ska bara gå på brasse-linux01 (label linux-amd64). Om jobbet ändå
hamnar på en arm64-runner avbryts det direkt, innan gradle startar, så att
Pi5:n inte OOM:ar och tar ner alla tjänster.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AFvSx1pF9pymyEuK7MFkEG
2026-09-06 12:57:42 +02:00

FitnessDroid

Android-klient för gym-API:t på https://gymapi.brasse-pc.eu/graphql — samma backend som gym-delen i brasse-pc.eu-v2.

  • Kräver Android 12 eller nyare (minSdk 31)
  • Kotlin + Jetpack Compose + Material 3 (Material You-dynamiska färger)
  • GraphQL över OkHttp, tokenlagring i DataStore

Installera appen på telefonen

Ladda ner FitnessDroid.apk från släppsidan (latest byggs om vid varje push till main), öppna filen på telefonen och tillåt installation från okänd källa. Uppdateringar installeras ovanpå — samma signeringsnyckel används av CI och lokala byggen.

Bygga själv

Förutsättningar (Arch/Garuda)

sudo pacman -S jdk17-openjdk android-tools

Android SDK behövs också (platform 35 laddas ner automatiskt av bygget om licensen är accepterad). Peka ut din SDK i local.properties i repo-roten:

sdk.dir=/home/<du>/Android/Sdk

Bygg

git clone https://gitea.brasse-pc.eu/brasse/FitnessDroid.git && cd FitnessDroid
./gradlew :app:assembleRelease            # signerad release-APK
# APK: app/build/outputs/apk/release/app-release.apk

I VS Code: kör build-tasken (Ctrl+Skift+B) — den lägger APK:n i build/FitnessDroid.apk. Tasken installera på telefon (adb) installerar den direkt på en ansluten telefon med USB-felsökning på.

Testa mot API:t

Logga in med ditt vanliga gym-konto (LDAP). API-url:en går att ändra under "Avancerat" på inloggningsskärmen (standard: https://gymapi.brasse-pc.eu/graphql).

Rekordstatus: träning / tävling / räknas ej

Under Statistik → Personbästa finns växeln Alla giltiga · Tävling · Träning. Tryck på ett rekord så öppnas ett ark med vikt, est. 1RM, datum, pass och anteckning, där lyftet kan märkas som Träning, Tävling eller Räknas ej (fusk, felregistrerat, ej godkänt) med en kommentar. Under arket visas topplistan för samma övning × reps ("näst i tur"), så ett bortplockat lyft kan väljas och återställas. Samma ark öppnas när man trycker på ett set i passhistoriken. "Räknas ej" tas ur rekord, 1RM och PB-höjdpunkter på servern (kod: ui/common/LiftStatusSheet.kt, API: setLiftStatus/setSessionSetStatus).

Signeringsnyckeln

Nyckeln är inte incheckad (repot är publikt). Lokalt ligger den i signing/fitnessdroid.jks + signing/keystore.properties (gitignorerade); CI får samma nyckel via Actions-secrets KEYSTORE_B64 och KEYSTORE_PASSWORD. Finns ingen nyckel signeras release-bygget med debug-nyckeln så att en färsk klon ändå kan bygga — men den APK:n kan inte uppdatera en installation från släppsidan (annan signatur).

Skapa en ny nyckel (om signing/ saknas):

keytool -genkeypair -keystore signing/fitnessdroid.jks -alias fitnessdroid \
  -keyalg RSA -keysize 2048 -validity 10950 -dname "CN=FitnessDroid, O=brasse-pc.eu"
# och skriv motsvarande signing/keystore.properties (storeFile/storePassword/keyAlias/keyPassword)

CI

.gitea/workflows/release.yaml bygger en signerad APK vid varje push till main och lägger den på den rullande latest-releasen. Bygget körs på runnern brasse-linux01-runner (x86_64, label linux-amd64) — Pi5:n orkar inte APK-bygget. Workflowen är ändå arkitekturvillkorad: på arm64 används en statiskt byggd aapt2 via android.aapt2FromMavenOverride.

Aktiviteter, kcal-mätare & mål

Utöver gympass loggar appen aktiviteter (promenad, löpning, vandring, fäktning/HEMA m.fl. — ~64 typer ur MET-kompendiet) med GPS-livespårning (osmdroid/OSM-karta, fartgrind mot GPS-hopp, accelerometer-rörelsevakt), RPE-slider för tidsbaserade aktiviteter och offline-kö. Hemskärmen visar dagens kalorier (aktivt loggat / telefonens steg via Health Connect / passiv BMR) och mål med progress (kcal, pass, steg, aktiviteter, km — per dag/vecka/månad). Statistiken har en konditionssektion ❤️. Plan & detaljer: doc/activities-plan.md.

Bluetooth-våg

Appen kan hämta vägningar (vikt + muskel/fett/vatten-%) direkt från en BLE-personvåg med openScales drivrutiner (vendrade under app/src/main/java/com/health/openscale/). Koppla vågen under Inställningar → Bluetooth-våg och väg dig från profilen. Först ut: Biltema 84-1002 (PT-727), som är en Exingtech Y1 ("VScale"). Detaljer: doc/openscale-integration.md.

Licens

GPL-3.0 (se LICENSE). Relicensierad från och med BT-vågstödet — openScales drivrutiner är GPL-3.0, vilket kräver att hela appen är det. BLE-biblioteket Blessed-Kotlin är MIT.

Mer om arkitektur och planer: doc/plan.md och wikin.

Description
Android app for lifting and tracking
Readme GPL-3.0 1.2 MiB
latest Latest
2026-07-23 13:24:29 +02:00
Languages
Kotlin 99.5%
Python 0.5%