| gradle | ||
| src | ||
| .editorconfig | ||
| .gitignore | ||
| build.gradle.kts | ||
| CHANGELOG.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| README.md | ||
| settings.gradle.kts | ||
mana-kotlin-core
Wiederverwendbarer Kotlin-Kern für die nativen Android-Apps von mana e.V.
Das Kotlin-Pendant zu ManaCore aus mana-swift-core.
Reine Kotlin/JVM-Library (kein Android-SDK), damit sie unabhängig gebaut/getestet und später optional KMP-fähig gemacht werden kann. Die Android-App konsumiert sie als normale Maven-Dependency.
Was drin ist (v0.1)
auth.AuthClient— Login/Refresh/Logout gegen mana-auth (/api/v1/auth/*). Portiert das Resilienz-Verhalten aus dem Swift-Core: Single-Flight-Refresh, proaktiver Refresh vor Ablauf, Soft-Fail (Tokens nur bei tatsächlich invalidierter Sitzung wischen, nicht bei 5xx/429).auth.TokenStore— plattform-neutrale Token-Persistenz (Interface). Android-App implementiert das über DataStore+Keystore;InMemoryTokenStorefür Tests.auth.Jwt— liestexp/sub/tieraus dem Token (ohne Signatur- Prüfung — die ist Server-Sache via JWKS).net.AuthenticatedApi— Bearer-Transport mit einmaligem 401-Refresh-Retry, für die verbleibenden REST-Endpunkte (Marketplace,/me, dsgvo …).net.manaHttpClient/net.ManaJson— Ktor-Client-Factory + geteilte Json-Konfiguration.model—Deck,Card(5 text-only Typen),Tier.
Was NICHT drin ist (bewusst)
User-eigene Decks/Cards/Reviews laufen seit dem Event-Sync-Cutover
(2026-05-20) komplett über Event-Sync (sync2.mana.how), nicht über
REST. Die Server-CRUD-Endpunkte sind 410 Gone. Dieser Kern deckt nur
Auth + den authentifizierten REST-Transport ab; der Daten-Layer kommt in
mana-kotlin-event-sync (Phase 2 des Android-Plans).
SOT-Plan: mana/docs/playbooks/WORDECK_ANDROID_GREENFIELD.md.
Bauen & Testen
# JDK kommt aus Android Studio (JBR); kein System-JDK nötig:
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
./gradlew test
Veröffentlichen (Forgejo Packages)
./gradlew publish \
-PforgejoToken=<token> \
-PforgejoPackagesUrl=https://git.mana.how/api/packages/till/maven
Stack: Kotlin 2.1 · Ktor 3 · kotlinx.serialization · coroutines · kotlinx.datetime. Ziel-Bytecode: JVM 17 (AGP/compileSdk-36-kompatibel).