Some checks failed
PR Checks / android-build (pull_request) Failing after 5m13s
Stand up the Android-app repo per docs/android/PLAN.md M0: a buildable Kotlin + Jetpack Compose (Material 3) single-activity skeleton wired for Hilt, ready for the M1-M4 functional pass. - Gradle 8.7 wrapper; AGP 8.6.1 / Kotlin 2.0.20, JDK 17, minSdk 29, target 35. - Version catalog (gradle/libs.versions.toml) pins the full planned stack (Compose, Hilt, Retrofit/OkHttp + kotlinx.serialization, DataStore, security-crypto, Coil, Navigation) so later milestones reference by alias. - RunicGatewayApp (@HiltAndroidApp) + MainActivity (Compose) + ui/theme/*. - Strings externalized from day one; adaptive launcher icon; backup rules exclude the token store / DataStore (no session material off-device). - CI: .gitea/workflows/pr-checks.yml gates PRs with lint + test + assembleDebug (JDK 17 + Android SDK on the self-hosted runner; debug builds auto-signed, no secrets). Placeholder JVM unit test so the test gate runs. - .gitattributes forces LF on gradlew so the wrapper runs on the Linux runner. Verified locally: `gradle help`/`projects` configure the :app module and resolve all six plugins cleanly (full assemble needs the Android SDK, done in CI). app id: com.runicgateway.app (PLAN.md §13, pending runicgateway.app domain). Co-Authored-By: Claude <noreply@anthropic.com>
60 lines
2.5 KiB
Markdown
60 lines
2.5 KiB
Markdown
<!-- SPDX-License-Identifier: GPL-3.0-or-later -->
|
||
# Runic Gateway — Android app
|
||
|
||
A native Android client for a Runic Gateway shard's **public site + player self-service**. It is
|
||
**purely an API client of the website backend** — it never talks to the `link/` sidecar or the game
|
||
shard directly, and it ships none of the shard/sidecar wiring. It surfaces the same content and
|
||
player features as the website's browser client, **minus every administrative/management console**.
|
||
|
||
The authoritative design contract is [`docs/android/PLAN.md`](https://gitea.whitlocktech.com/RunicGateway/docs)
|
||
in the `RunicGateway/docs` repo. The authoritative API reference is the committed OpenAPI spec at
|
||
`website/server/swagger/swagger-output.json`.
|
||
|
||
## Status
|
||
|
||
**M0 — repo scaffold.** Gradle + Compose + Hilt skeleton with CI (lint + unit test + debug build).
|
||
The functional Kotlin pass (M1–M4) and the design pass (M5) follow — see the plan's milestones (§9).
|
||
|
||
## Stack
|
||
|
||
| Concern | Choice |
|
||
|---|---|
|
||
| Language / UI | Kotlin + Jetpack Compose (Material 3) |
|
||
| Navigation | Navigation-Compose, single-activity |
|
||
| HTTP | Retrofit + OkHttp, `kotlinx.serialization` |
|
||
| Async | Coroutines + Flow |
|
||
| DI | Hilt |
|
||
| Prefs / base URL | Jetpack DataStore |
|
||
| Tokens at rest | EncryptedSharedPreferences |
|
||
| Images | Coil |
|
||
| Min SDK | Android 10 (API 29) |
|
||
| Target / compile SDK | 35 |
|
||
|
||
Dependency and plugin versions are pinned in [`gradle/libs.versions.toml`](gradle/libs.versions.toml).
|
||
|
||
## Build
|
||
|
||
Requires **JDK 17** and the Android SDK (`ANDROID_HOME` / `local.properties`).
|
||
|
||
```bash
|
||
./gradlew assembleDebug # build a debug APK -> app/build/outputs/apk/debug/
|
||
./gradlew test # JVM unit tests
|
||
./gradlew lint # Android lint
|
||
./gradlew installDebug # install on a connected device/emulator
|
||
```
|
||
|
||
The app self-configures its server URL on first run (PLAN.md §3), so a single build works against
|
||
any shard's website — there is no compiled-in API host.
|
||
|
||
## CI
|
||
|
||
`.gitea/workflows/pr-checks.yml` gates PRs into `main` with `./gradlew lint test assembleDebug` on the
|
||
org's self-hosted runner (JDK 17 + Android SDK). Debug builds are auto-signed, so the gate needs no
|
||
secrets. A signed **release** APK attached to a Gitea release comes at M6.
|
||
|
||
## Contributing
|
||
|
||
See [`CONTRIBUTING.md`](CONTRIBUTING.md). **AI-assisted contributions must be disclosed** (org
|
||
policy): tick the PR box naming the tool and add a `Co-Authored-By` trailer to AI-authored commits.
|
||
Licensed **GPL-3.0-or-later**.
|