# 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](https://gitea.brasse-pc.eu/brasse/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](https://gitea.brasse-pc.eu/brasse/FitnessDroid/releases) (`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) ```bash 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: ```properties sdk.dir=/home//Android/Sdk ``` ### Bygg ```bash 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`). ## 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): ```bash 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 på Pi5-runnern (arm64) vid varje push till `main` och lägger den på den rullande `latest`-releasen. Eftersom Googles aapt2 bara finns för x86_64 använder bygget en statiskt byggd arm64-aapt2 via `android.aapt2FromMavenOverride`. ## Bluetooth-våg Appen kan hämta vägningar (vikt + muskel/fett/vatten-%) direkt från en BLE-personvåg med [openScale](https://github.com/oliexdev/openScale)s 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`](doc/openscale-integration.md). ## Licens GPL-3.0 (se [`LICENSE`](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](https://github.com/weliem/blessed-kotlin) är MIT. Mer om arkitektur och planer: [`doc/plan.md`](doc/plan.md) och [wikin](https://gitea.brasse-pc.eu/brasse/FitnessDroid/wiki).