Android-App mit Homescreen-Widget für Backrest (restic-Web-UI).
- Laufende Backups: Welcher Plan gerade sichert, mit Fortschritt in %, Datenmenge, Dateien und aktueller Datei. Prüfung, Prune, Hooks usw. werden ebenfalls angezeigt. In der App lassen sie sich abbrechen.
- Warteschlange: Backrest arbeitet Aufgaben nacheinander ab. Fällige, aber noch wartende Backups und Repo-Aufgaben (z. B. hinter einer langen Prüfung) erscheinen unter „Wartet in der Warteschlange“ mit Platz und Wartezeit; die Plan-Karte und das Widget zeigen „wartet seit … · Platz n“, die Statuszeile „… · 3 warten“.
- Remote-Instanzen (Multihost): Ist dein Backrest ein Multihost-Server, erscheinen die Pläne der verbundenen Clients (z. B. VPS) mit Instanzname, Verbindungsstatus, letztem und nächstem Backup. Starten und abbrechen lassen sie sich nur auf der jeweiligen Instanz.
- Widget: Gesamtstatus (grün/blau/orange/rot), je Plan letztes Backup und nächster Lauf, Aktualisieren-Button, Offline-Anzeige mit letztem Stand. Größe frei veränderbar; flach gezogen zeigt es nur die Statuszeile. Material You ab Android 12, Dark Mode.
- App: Pläne mit letztem Backup, Dauer, nächstem Lauf, 30-Tage-Statistik und Verlaufsbalken; Repositories mit gesicherter Größe; „Backup starten“ je Plan; Link zur Weboberfläche.
- Benachrichtigungen, einzeln schaltbar und je mit eigenem Android-Kanal: fehlgeschlagenes Backup, Backup mit Warnung (standardmäßig aus), andere fehlgeschlagene Aufgabe (Prune, Prüfung, Forget, Hook …), fehlgeschlagener Abruf (Server nicht erreichbar, Anmeldung … – erst nach einstellbar vielen Fehlversuchen hintereinander, einmal pro Störung) und getrennte Remote-Instanz (ab 15 min ohne Lebenszeichen). Mit Testbenachrichtigung.
- App-Version unten auf der Hauptseite und in den Einstellungen.
- Aktualisierung im Hintergrund per WorkManager (Standard 30 min, minimal 15 min). Solange etwas läuft, aktualisiert sich das Widget jede Minute, die geöffnete App alle 3 s.
Lizenz: MIT. Benötigt Android 8.0+ und Backrest ≥ 1.6 (getestet mit 1.14.1).
- APK installieren, App öffnen.
- Server-URL eintragen (
http://192.168.x.x:9898oderhttps://backrest.example.at), bei aktivierter Backrest-Anmeldung Benutzer und Passwort. - Widget über den Launcher hinzufügen.
- Spricht Backrests Connect-RPC-API direkt an (
v1.Authentication/Login,v1.Backrest/GetSummaryDashboard,v1.Backrest/GetOperationsmit leerem Selector für laufende Operationen,v1.Backrest/Backup,v1.Backrest/Cancel). GetConfigwird bewusst nicht abgerufen, weil es Repo-Passwörter im Klartext liefert.Backupantwortet erst, wenn das Backup fertig ist. Backrest bricht es aber nicht ab, wenn der Client trennt. Die App wartet 10 s und meldet dann „läuft“.- Das Passwort liegt AES-GCM-verschlüsselt mit einem Android-Keystore-Schlüssel vor; App-Backup ist deaktiviert.
- Klartext-HTTP ist erlaubt (LAN), ebenso vom Nutzer installierte CA-Zertifikate (eigene CA).
- Keine Abhängigkeiten außer AndroidX WorkManager; APK ≈ 300 KB.
./gradlew testDebugUnitTest assembleReleaseReleases baut GitHub Actions (.github/workflows/release.yml) beim Push eines Tags vX.Y.Z: Tests, signierte Release-APK, GitHub-Release mit dem Text aus RELEASE_NOTES.md. Dafür müssen die Secrets SIGNING_KEYSTORE_BASE64, SIGNING_STORE_PASSWORD, SIGNING_KEY_ALIAS und SIGNING_KEY_PASSWORD gesetzt sein; ohne sie bricht der Workflow ab, statt mit dem Debug-Schlüssel zu signieren.
Für signierte Release-Builds keystore.properties anlegen (storeFile, storePassword, keyAlias, keyPassword); ohne diese Datei wird mit dem Debug-Schlüssel signiert.