# F-Droid distribution F-Droid builds use the application ID `social.flotilla.fdroid`. Preparation removes Firebase, Google Services, Plausible, and the ACINQ native secp256k1 library. Welshman's optional `nostr-wasm` accelerator uses its pure JavaScript verifier. The normal Play/Zapstore build is unchanged. Background notifications use `AndroidPushFallbackWorker`: WorkManager polls the configured relays about every 15 minutes and posts local notifications. Android Doze and background scheduling can delay delivery further. Pomade login, registration, and key recovery use the JavaScript Argon2 adapter. With Pomade's parameters (t=3, m=64 MiB, p=2, 32-byte output), a benchmark on a 2-core x86 machine measured 426 ms with `hash-wasm` versus 4.0 s with the adapter, with matching digests. Physical-device timing has not yet been measured. ## Build Preparation changes source and dependencies, so run it in a disposable checkout with the Node, pnpm, Java, Android SDK, and Gradle versions pinned by this repository. ```sh corepack enable ./scripts/prepare-fdroid-source.sh ./scripts/build-fdroid-assets.sh cd android ./gradlew assembleFdroidRelease ``` After preparation and the asset build, run the BouncyCastle key-operation and BIP-340 vector tests from `android/` with: ```sh ./gradlew :app:testFdroidDebugUnitTest --tests social.flotilla.notifications.FallbackSecp256k1Test ``` `fdroid/app.gradle` registers `fdroid/tests` only in the prepared checkout. The unsigned APK is written to `android/app/build/outputs/apk/fdroid/release/app-fdroid-release-unsigned.apk`. F-Droid should run preparation before its source scan, run the asset build afterward, and use its configured Gradle runner for `assembleFdroidRelease`. The F-Droid recipe can use: ```yaml subdir: android/app gradle: - fdroid prebuild: - ../../scripts/prepare-fdroid-source.sh build: - ../../scripts/build-fdroid-assets.sh ``` ## Updates Stable releases use bare version tags such as `1.9.1`. Proposed update metadata: ```yaml UpdateCheckMode: Tags ^[0-9]+\.[0-9]+\.[0-9]+$ UpdateCheckData: 'android/app/build.gradle|(?m)^\s*versionCode\s+(\d+)\s*$|.|(?m)^\s*versionName\s+"([^"]+)"\s*$' AutoUpdateMode: Version ``` The initial `fdroiddata` submission must still review scanner exceptions for FLOSS build tools, optional OpenRouter use for a possible `NonFreeNet` declaration, and the final F-Droid signing certificate for Android App Links.