Some checks failed
release / build-release (push) Failing after 1m42s
- Kotlin + Jetpack Compose + Material 3, minSdk 31 (Android 12) - GraphQL-klient (OkHttp) med login/refresh/validate/logout som webben - Tokenlagring i DataStore, auto-refresh av JWT - Signering via gitignorerad signing/ lokalt och Actions-secrets i CI - VS Code build-task -> build/FitnessDroid.apk - Gitea Actions: bygger APK på Pi5 (arm64, aapt2-override) och publicerar rullande latest-release Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
75 lines
2.8 KiB
Markdown
75 lines
2.8 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`.
|
|
|
|
Mer om arkitektur och planer: [`doc/plan.md`](doc/plan.md) och
|
|
[wikin](https://gitea.brasse-pc.eu/brasse/FitnessDroid/wiki).
|