chore(repo): Android-App als android/ ins Hauptrepo uebernehmen
Calendarr-Android wird mit vollstaendiger Historie als Unterverzeichnis android/ eingebunden, damit Server, Web und die mobilen Apps in einem Repo liegen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
# Publishing Calendarr on F-Droid
|
||||
|
||||
Two independent channels — do both in parallel:
|
||||
|
||||
- **Own repo (live today):** you build + sign the APK, generate a small catalog,
|
||||
host it at a URL; users add that URL in the F-Droid app.
|
||||
- **Official F-Droid (~weeks to be accepted, then automatic):** F-Droid builds +
|
||||
signs from source and lists it in the catalog every F-Droid user already has.
|
||||
|
||||
The app is GPLv3 and has **no** non-free dependencies (no Play Services / Firebase),
|
||||
so it is F-Droid-eligible. Store-listing metadata lives in `fastlane/metadata/…`.
|
||||
|
||||
> ⚠️ Signatures differ between the two channels: your own repo serves APKs signed
|
||||
> with **your** keystore; the official build is signed with **F-Droid's** key. A
|
||||
> user can't seamlessly update from one to the other (reinstall once). To unify
|
||||
> later, set up *Reproducible Builds* so F-Droid ships your signature.
|
||||
|
||||
---
|
||||
|
||||
## A) Your own repo (fdroid.scarriffle.com)
|
||||
|
||||
The repo is just static files (APKs + a signed index). Host + generate it on an
|
||||
always-on **Debian/Ubuntu LXC on Proxmox**, and keep the APK build/signing on the
|
||||
Mac (where the keystore lives).
|
||||
|
||||
### One-time: set up the LXC
|
||||
|
||||
```bash
|
||||
# Debian/Ubuntu LXC — fdroidserver + the Android build-tools it reads APKs with.
|
||||
apt update
|
||||
apt install -y fdroidserver android-sdk-build-tools default-jdk
|
||||
# (if the distro has no android-sdk-build-tools pkg, install Android command-line
|
||||
# tools and `sdkmanager "build-tools;34.0.0"`, then point $ANDROID_HOME at it)
|
||||
|
||||
# Create the repo once (generates config.yml + an index-signing key)
|
||||
mkdir -p /srv/fdroid && cd /srv/fdroid
|
||||
fdroid init
|
||||
```
|
||||
|
||||
**Serving:** you already run a reverse proxy, so it terminates TLS for
|
||||
`fdroid.scarriffle.com`. Either point the reverse proxy straight at the
|
||||
`/srv/fdroid` directory (no webserver on the LXC needed — just `fdroidserver` to
|
||||
generate), or run a tiny static server on the LXC over plain HTTP and forward to
|
||||
it, e.g. `darkhttpd /srv/fdroid --port 8080` (or `caddy file-server` /
|
||||
`python3 -m http.server`). Only requirement: the public URL is reachable over
|
||||
**HTTPS** (the reverse proxy does that); it's plain static file serving, no
|
||||
directory listing needed.
|
||||
|
||||
### Each release
|
||||
|
||||
```bash
|
||||
# 1. On the MAC: build a SIGNED release APK (F-Droid repos serve APKs, not AABs)
|
||||
./gradlew assembleRelease # → app/build/outputs/apk/release/app-release.apk
|
||||
|
||||
# 2. Copy APK + store metadata to the LXC
|
||||
scp app/build/outputs/apk/release/app-release.apk root@lxc:/srv/fdroid/repo/
|
||||
rsync -a "fastlane/metadata/android/" root@lxc:/srv/fdroid/metadata/com.scarriffle.calendarr/
|
||||
|
||||
# 3. On the LXC: regenerate the signed index
|
||||
cd /srv/fdroid && fdroid update -c --pretty
|
||||
```
|
||||
|
||||
Users then open F-Droid → Settings → Repositories → **+** →
|
||||
`https://fdroid.scarriffle.com/fdroid/repo` → Calendarr appears and auto-updates.
|
||||
|
||||
Keep the OLD apks in `repo/` too (users on older versions still update). For each
|
||||
new version bump `versionCode`/`versionName` in `app/build.gradle.kts` first.
|
||||
|
||||
*(Fully hands-off alternative: build on the LXC too — then copy the keystore +
|
||||
`keystore.properties` there and run `assembleRelease` in a checkout. The Mac
|
||||
split above avoids putting the signing key on the server.)*
|
||||
|
||||
---
|
||||
|
||||
## B) Official F-Droid (fdroiddata)
|
||||
|
||||
Prereqs: the `SourceCode` repo in `fdroid/com.scarriffle.calendarr.yml` must be
|
||||
**publicly clonable** (make the Gitea repo public, or mirror to GitHub/GitLab and
|
||||
point `Repo:`/`SourceCode:` there), and a signed git tag `v1.1.0` must exist
|
||||
(created for this release).
|
||||
|
||||
1. Fork <https://gitlab.com/fdroid/fdroiddata>.
|
||||
2. Add our recipe as `metadata/com.scarriffle.calendarr.yml`
|
||||
(copy from `fdroid/com.scarriffle.calendarr.yml` in this repo).
|
||||
3. Optional local sanity check: `fdroid lint com.scarriffle.calendarr` and
|
||||
`fdroid build -v -l com.scarriffle.calendarr`.
|
||||
4. Open a Merge Request. F-Droid reviews, builds and publishes (this first review
|
||||
is the slow part — weeks). Afterwards, `AutoUpdateMode` picks up each new
|
||||
`v<versionName>` tag automatically.
|
||||
|
||||
---
|
||||
|
||||
## Screenshots (both channels)
|
||||
Add PNG/JPG screenshots to
|
||||
`fastlane/metadata/android/en-US/images/phoneScreenshots/` (and `de-DE/…`),
|
||||
named `1.png`, `2.png`, … They then show on the F-Droid listing.
|
||||
Reference in New Issue
Block a user