A single Activity holding one WebView, in Java rather than Kotlin — for ~120 lines of setup Kotlin would only add its Gradle plugin, its stdlib in the APK and a third version to keep aligned with Gradle and AGP. One dependency: androidx.webkit 1.16.0. The assets are served from https://appassets.androidplatform.net through WebViewAssetLoader rather than file://. That is the part that matters: an https origin is a secure context, and localStorage — which holds every setting and the match in progress — is blocked on file://, so a saved game would silently vanish. Confirmed on device: force-quit mid-match and everything comes back. public_html stays the only copy of the web app. A task syncs it into the assets at build time, so the browser version and the app version cannot drift; the APK's index.html hashes identical to the working tree. sw.js is left out on purpose — it is cache-first, and a service-worker cache outlives an app upgrade, so it would serve a stale index.html with no way to clear it. The APK is the cache now. Three web APIs don't exist in a WebView, so the Activity supplies them: FLAG_KEEP_SCREEN_ON for navigator.wakeLock, native immersive mode for requestFullscreen(), and LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES so the panels' env(safe-area-inset-*) has something to report. textZoom is pinned to 100: the layout is built on clamp() and vw, and a large system font would scale the text inside it. The manifest declares no permissions whatsoever. Wiring note: AGP 9 refuses a Provider in sourceSets.assets.srcDir, since it can't tell generated from static directories. The sync is a task with a DirectoryProperty output, attached via androidComponents.onVariants, which is the supported path and carries the task dependency. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
5 lines
76 B
Plaintext
5 lines
76 B
Plaintext
android/.gradle/
|
|
android/build/
|
|
android/app/build/
|
|
android/local.properties
|