From 1bd3e2613641a8d2bc63c262a58cad126632459f Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 17 Sep 2026 08:19:41 -0700 Subject: Android: a reproducible F-Droid flavor with the web app bundled inside. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Android builds so far were shells around the live site: a verified APK proved nothing about the code that ran. The new `fdroid` flavor (io.coinos.fdroid) shares the WebView shell and carries the built web app in its assets. The page still lives at the v3.coinos.io origin — same storage, links and gift URLs — but every file under it is answered from the APK (Assets.java); only the site's live API paths reach the network, and the bundled page registers no service worker (HAL_NO_SW=1). Two clean unsigned builds give the same APK. COINOS_UNSIGNED=1 builds without the keystore; Bun is pinned via packageManager; the Gradle wrapper properties pin 8.12. fdroid/io.coinos.fdroid.yml is the fdroiddata recipe (checksum-pinned Bun in sudo, prebuild web build, scandelete, our signing key allowed for the Binaries match) and docs/REPRODUCIBLE.md the how-to. Verified on a phone: the bundled build cold-starts in airplane mode. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01JuwQqNWtDJcxPWtEm9134z --- build.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'build.js') diff --git a/build.js b/build.js index 0f2373e..fc58f8f 100644 --- a/build.js +++ b/build.js @@ -360,6 +360,11 @@ function bootShell(logo, staging) { } const BOOT_SHELL_SCRIPT = ``; +// HAL_NO_SW=1: the page registers no service worker. The Android bundled +// build serves this page from its own assets, where a worker would only +// fetch the live site over the top of them. +const NO_SW = !!process.env.HAL_NO_SW; + async function pageHtml({ css, staging, pwa, scriptHtml }) { return ` @@ -376,7 +381,7 @@ ${pwa ? PWA_HEAD : ''}
${bootShell(await brandSvg(), staging)}
${BOOT_SHELL_SCRIPT} ${scriptHtml} -${pwa ? SW_REGISTER + '\n' : ''} +${pwa && !NO_SW ? SW_REGISTER + '\n' : ''} `; } -- cgit v1.2.3