Files
LockScreenWallpaper/README.md
T
Christoph 7c15f51355
Android Release / Build signed release APK (push) Canceled after 40m19s
feat(android): add Android release workflow and shuffle UI improvements
Adds a new Android release workflow to sign and publish APKs when tags are pushed. Also enhances wallpaper shuffle by tracking seen IDs to reduce repeats. UI changes in App.tsx introduce lazy loading for the gallery and improved navigation/history handling.

- Add Android signing workflow with keystore secrets
- Track shuffle seen IDs to avoid image repeats
- Enable gallery lazy loading via sentinel and observer
2026-08-25 23:22:36 +02:00

104 lines
5.4 KiB
Markdown

# WallpaperFlow
WallpaperFlow ist eine freie Tauri-2-App für Android, die aus einer frei wählbaren Bildsammlung in einem einstellbaren Zeitintervall ein neues Sperrbildschirmbild setzt.
## Was bereits umgesetzt ist
- Mehrfachauswahl über den Android-Systemdialog
- kein festes Bilderlimit; Originale werden in den privaten App-Speicher kopiert
- Wechsel nur für den Sperrbildschirm oder für das allgemeine Hintergrundbild
- zufällige oder fortlaufende Reihenfolge
- manueller Wechsel über „Nächstes Motiv“
- automatischer Wechsel alle 5, 15 oder 30 Minuten beziehungsweise alle 1, 3, 6 oder 12 Stunden
- optionaler Wechsel bei jedem Einschalten des Displays
- erneute Planung des automatischen Wechsels nach einem Geräte-Neustart
- lokale Vorschaubilder; die Originalbilder verlassen das Gerät nicht
- optionaler Import aus einem selbst gehosteten Immich-Server über einen eingeschränkten API-Key
- vollständig lokale Oberfläche in Deutsch, Englisch, Französisch, Spanisch, Italienisch, Niederländisch, Polnisch, Portugiesisch, Japanisch, Koreanisch und vereinfachtem Chinesisch
Der automatische Wechsel verwendet einen ungenauen Android-Alarm und respektiert Doze sowie den Energiesparmodus. Dadurch gibt es keinen dauerhaft laufenden Dienst und keine permanente Benachrichtigung; Wechsel können im Ruhezustand etwas später erfolgen. Automatische Immich-Downloads erfolgen nur über eine nicht getaktete Verbindung und bei ausreichendem Akkustand.
Der optionale Modus „Beim Einschalten des Displays“ benötigt dagegen einen kleinen Foreground Service mit permanenter Benachrichtigung, damit Android die Display-Ereignisse zuverlässig zustellt. Das nächste Bild wird bereits beim Ausschalten gesetzt und ist dadurch beim folgenden Einschalten ohne sichtbare Verzögerung vorhanden. Der Dienst hält keinen CPU-Wake-Lock.
## Entwicklung
```bash
npm install
npm run dev
npm run build
cargo check --manifest-path src-tauri/Cargo.toml
```
## Android-Projekt erzeugen und bauen
Benötigt werden Android Studio/SDK, NDK 28 oder neuer, JDK 17+ und die Rust-Android-Targets.
```bash
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
npm run tauri android init
npm run tauri android build -- --apk
```
Für ein angeschlossenes Gerät:
```bash
npm run tauri android dev
```
Der native Android-Code liegt als lokales Tauri-Plugin in `plugins/android`. Er wird beim Android-Build automatisch eingebunden.
## Signierte Android-Releases mit Gitea Actions
Der Workflow `.gitea/workflows/android-release.yml` baut bei Tags wie `v0.1.0`
eine signierte Universal-APK. Der Tag muss der Version in
`src-tauri/tauri.conf.json` mit vorangestelltem `v` entsprechen. Der Workflow
kann außerdem manuell über die Actions-Oberfläche gestartet werden.
In den Repository-Einstellungen unter **Settings → Actions → Secrets** müssen
folgende Secrets angelegt werden:
- `ANDROID_KEYSTORE_BASE64`: der Base64-kodierte Inhalt des Release-Keystores
- `ANDROID_KEYSTORE_PASSWORD`: Passwort des Keystores
- `ANDROID_KEY_ALIAS`: Alias des Signaturschlüssels
- `ANDROID_KEY_PASSWORD`: Passwort des Signaturschlüssels
Den Keystore-Inhalt für das Secret erzeugt man unter Linux mit:
```bash
base64 -w 0 /sicherer/pfad/wallpaperflow-release.jks
```
Nach erfolgreichem Lauf stehen `WallpaperFlow-release.apk` und die zugehörige
SHA-256-Prüfsumme als Artefakt des Workflows bereit. Der Keystore darf nicht in
das Repository eingecheckt werden und muss dauerhaft gesichert bleiben, da
spätere Updates mit demselben Schlüssel signiert werden müssen.
Voraussetzung ist ein aktiver Gitea-Actions-Runner mit dem Label
`ubuntu-latest`, Netzwerkzugriff auf npm, Rust und die Android-SDK-Server sowie
ausreichend Speicher für Android SDK, NDK und Rust-Buildartefakte.
## Wichtige Android-Hinweise
- Android darf ungenaue Alarme im Ruhemodus verzögern. Der nächste Wechsel wird ausgeführt, sobald das Gerät wieder aktiv ist.
- `WallpaperManager.FLAG_LOCK` ist ab Android 7 verfügbar. Auf älteren Geräten setzt die App das allgemeine Hintergrundbild.
- Hersteller können Hintergrundarbeit zusätzlich verzögern. Eine Ausnahme von der Akku-Optimierung ist für den normalen Betrieb nicht vorgesehen.
- „Ohne Limit“ bedeutet: kein App-Zähler wie Samsungs 15-Bilder-Grenze. Praktisch begrenzen freier Gerätespeicher und Dateisystem die Sammlung.
## Datenschutz
WallpaperFlow verarbeitet importierte Bilder lokal auf dem Gerät. Die optionale Immich-Anbindung kommuniziert ausschließlich mit dem vom Nutzer eingetragenen, selbst gehosteten Server und lädt nur ausdrücklich ausgewählte Bilder herunter. Die App enthält keine Werbung, kein Tracking und keine Analysedienste. Bilder werden nicht hochgeladen oder an andere Server weitergegeben.
Weitere Einzelheiten stehen in der [Datenschutzerklärung](PRIVACY.md).
## Veröffentlichungen
Für eine neue Veröffentlichung müssen die Version in `package.json`, `src-tauri/tauri.conf.json` und `src-tauri/Cargo.toml` gemeinsam erhöht und ein passender Git-Tag angelegt werden, beispielsweise `v0.1.0`. Der Android-`versionCode` muss bei jeder Veröffentlichung steigen.
Die Metadaten für F-Droid liegen unter `fastlane/metadata/android`. Das Buildrezept für F-Droid befindet sich in `.fdroid.yml`.
## Lizenz
Copyright (C) 2026 Christoph
WallpaperFlow ist freie Software und steht unter der GNU General Public License Version 3.0 (`GPL-3.0-only`). Die vollständigen Lizenzbedingungen stehen in [LICENSE](LICENSE).