chore(scaffold): M0 — Gradle + Compose + Hilt skeleton with CI
Some checks failed
PR Checks / android-build (pull_request) Failing after 2m42s
Some checks failed
PR Checks / android-build (pull_request) Failing after 2m42s
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 (chmod +x, and re-chmod'd in CI); AGP 8.6.1 / Kotlin 2.0.20, JDK 17, minSdk 29, target 35, applicationId com.runicgateway.app. - 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/*; externalized strings; 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. Installs JDK 17 via apt (the runner can't resolve api.adoptium.net, so actions/setup-java is avoided) and the SDK via sdkmanager; chmods gradlew in-step because this runner's checkout drops the git executable bit. Verified locally against the Android Studio SDK (platform 35 + build-tools 35.0.0): `./gradlew lint test assembleDebug` passes and produces a debug APK. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
59
README.md
Normal file
59
README.md
Normal file
@@ -0,0 +1,59 @@
|
||||
<!-- 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**.
|
||||
Reference in New Issue
Block a user