Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C2GA94E1f3cmrvdQLQhYdg
91 lines
3.5 KiB
Markdown
91 lines
3.5 KiB
Markdown
# 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/<du>/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).
|