feat(android)!: replace the Capacitor wrapper with a native Kotlin/Compose app

Fresh Kotlin 2.2 + Jetpack Compose app at feature parity with web/
(game logic, settings contract, voice semantics ported one-to-one with
twinned tests; 104 unit + 9 instrumentation tests). Fully offline:
VIBRATE is the only permission; Media3's ACCESS_NETWORK_STATE is
stripped. Voice clips mount from web/static/audio at build time.

Same applicationId, signing env contract, and Play alpha track;
versionCode 7 / 0.2.0. CI Android job is Gradle-only (lint, test,
debug + R8 release APK) and the release workflow fails fast on an
unbumped versionCode.

BREAKING CHANGE: WebView localStorage (settings, in-progress round)
is not migrated; wrapper users start clean.
This commit is contained in:
tiennm99 committed 2026-08-31 13:28:48 +07:00
1 parent 8f9b03ca05
commit e314ae01c8
126 files changed
+6390 -2275

No files matched your search

+4 -4
View File
@@ -145,11 +145,11 @@ One workflow, `.github/workflows/ci.yml`, covers PRs and pushes to `main`:
- **`deploy-pages`** — canonical deploy; publishes `web-build-gh`.
- **`deploy-firebase`** / **`preview-firebase`** — Firebase live channel on
`main`, preview channel on same-repo PRs; both consume `web-build`.
- **`android-debug`** — syncs `web-build` into the Capacitor project and
assembles an unsigned APK.
- **`android-debug`** — independent of the web build: lints, tests and
assembles the native app's unsigned APK straight from the checkout.
Tags run `.github/workflows/android-release.yml` instead, which builds the
web app itself because no `ci` run exists to take artifacts from.
Tags run `.github/workflows/android-release.yml` instead, which builds
standalone because no `ci` run exists to take artifacts from.
## Performance Checklist