- 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
2.8 KiB
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).
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 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 och
wikin.