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

+3 -14
View File
@@ -1,19 +1,12 @@
name: Set up Android toolchain
description: >
Installs Node, JDK and Gradle, then restores android/ dependencies from the
lockfile. Covers the Capacitor CLI only — the web bundle it syncs is built
separately and must already exist at web/build.
Installs the JDK and configures Gradle caching for the native Android
project in android/. The app is pure Kotlin/Compose — no Node, no web
build artifact.
runs:
using: composite
steps:
# Keep in lockstep with .github/actions/setup-web.
- uses: actions/setup-node@v7
with:
node-version: '24'
cache: npm
cache-dependency-path: android/package-lock.json
- uses: actions/setup-java@v5
with:
distribution: temurin
@@ -22,7 +15,3 @@ runs:
- uses: gradle/actions/setup-gradle@v6
with:
cache-provider: basic
- run: npm ci
shell: bash
working-directory: android