chore(fdroid): prepare repo for F-Droid submission#42
Conversation
F-Droid builds from source and needs three things this repo could not provide: a statically-parseable version, an unsigned release APK, and a changelog for every released versionCode. - app/version.properties: literal versionName/versionCode for F-Droid's checkupdates (UpdateCheckData). The Gradle build still derives the real values from the git tag via axion-release; this file is not read by it. - app/build.gradle.kts: -PdisableSigning now yields an unsigned release APK (app-release-unsigned.apk) for F-Droid to sign; the debug-signing fallback for keyless local/CI builds is preserved. - fastlane changelogs: add 101000 (v1.1.0) and 101010 (v1.1.1) in en-US and de-DE; move the misfiled Shizuku-startup-race note out of 100010 (v1.0.1) into 101000, where PR #39 actually landed it. - release.yml: fail the tag build if version.properties disagrees with the tag or a changelog is missing/over 500 chars. - AGENTS.md: document the per-release checklist (bump version.properties + write both changelogs before tagging). - README: correct compileSdk platform 35 -> 36. - docs/plans: fdroiddata recipe and submission steps for reference. Verified: `assembleRelease -PdisableSigning` -> unsigned APK; `assembleRelease` -> debug-signed APK; `./gradlew lint` clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A reproducibility probe against the v1.1.0 release (build the tag from a
clean clone, compare zip entries by CRC against the signed GitHub APK)
showed 121/122 entries already byte-identical. The only mismatch was
libdatastore_shared_counter.so (DataStore's native lib, 4 ABIs): CI
strips it host-dependently via the runner's NDK, while a plain build
keeps the pristine AAR bytes.
Add packaging { jniLibs { keepDebugSymbols += "**/*.so" } } so AGP does
not strip native libs — every environment then packages the identical
pristine dependency bytes. Verified: the four .so CRCs now equal the
datastore-core AAR CRCs. With this in the v1.1.1 tag, the GitHub release
APK is also unstripped, so F-Droid's from-source build reproduces it and
can ship the app under the developer signature (AllowedAPKSigningKeys)
instead of F-Droid's key.
Also switch the fdroiddata recipe draft to the reproducible-builds form
(binary: + AllowedAPKSigningKeys 87e5fe65...) and record the probe.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Reproducibility verified (preliminary) + native-lib fix addedRan a reproducibility probe against the existing v1.1.0 release before committing to the one-way-door signing decision: built the Result: 121 of 122 entries were already byte-identical — all DEX, resources, and Fix ( The recipe draft in |
Prepares the repo so F-Droid can build SleepTimer from source. F-Droid builds from source and needs three things this repo could not provide: a statically-parseable version, an unsigned release APK, and a changelog for every released versionCode.
Changes
app/version.properties(new) — literalversionName/versionCodefor F-Droid'scheckupdates(UpdateCheckData). The Gradle build still derives the real values from the git tag via axion-release; this file is not read by the build. Bumped per release.app/build.gradle.kts—-PdisableSigningnow emits an unsignedapp-release-unsigned.apkfor F-Droid to sign itself. The debug-signing fallback for keyless local/CI builds is preserved; release signing withSIGNING_KEYSTORE_PATHis unchanged.101000(v1.1.0) and101010(v1.1.1) inen-USandde-DE; move the misfiled Shizuku-startup-race note out of100010(v1.0.1) into101000, where PR fix: timer runtime correctness, theming, and Shizuku UserService migration #39 actually landed it..github/workflows/release.yml— new guard step fails the tag build ifversion.propertiesdisagrees with the tag or a changelog is missing / over 500 chars.AGENTS.md(viaCLAUDE.mdsymlink) — documents the per-release checklist: bumpversion.properties+ hand-write both changelogs before tagging.README.md— correctcompileSdkplatform 35 → 36.docs/plans/2026-07-06-fdroid-submission.md— the fdroiddata recipe and submission steps for reference (the recipe itself lives in the fdroiddata fork, not this repo).Verification
./gradlew :app:assembleRelease -PdisableSigning→app-release-unsigned.apk(no signature, noMANIFEST.MF) — what fdroidserver globs for../gradlew :app:assembleRelease→app-release.apk, debug-signed — keyless builds still work../gradlew lint→ clean.Follow-ups (not in this PR)
v1.1.1to publish the release the fdroiddata recipe points at.🤖 Generated with Claude Code