From cd89e36ec2b812a6f99b127c9df934e1028eaf22 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 25 Apr 2026 01:22:22 +0200 Subject: [PATCH] fix: alte APKs im Cache werden jetzt aufgeraeumt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die heruntergeladenen Update-APKs (~20-30MB pro Release) landeten in CachesDirectoryPath und wurden nie geloescht. Bei regelmaessigen Updates sammelt sich das auf mehrere 100MB an. Fix: cleanupOldApks() wird gerufen - einmal beim App-Start (Constructor) — alte APKs sind sowieso nicht mehr relevant, die aktuelle Version laeuft ja aus dem System - vor jedem neuen Download — falls jemand zwei Updates in einer Session zieht Loescht alle *.apk Dateien im CachesDirectoryPath und loggt die freigemachte Groesse pro Datei. Co-Authored-By: Claude Opus 4.7 (1M context) --- android/src/services/updater.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/android/src/services/updater.ts b/android/src/services/updater.ts index b60c4a9..74d019d 100644 --- a/android/src/services/updater.ts +++ b/android/src/services/updater.ts @@ -29,6 +29,11 @@ class UpdateService { private downloading = false; constructor() { + // Beim Start alte APK-Reste aus dem Cache wegraeumen — wenn diese App + // laeuft, sind frueher heruntergeladene APKs entweder schon installiert + // oder unvollstaendig gewesen. Spart sonst pro Update 20-30MB auf dem Handy. + this.cleanupOldApks().catch(() => {}); + // Auf update_available Nachrichten lauschen rvs.onMessage((msg: RVSMessage) => { if (msg.type === 'update_available' as any) { @@ -45,6 +50,30 @@ class UpdateService { }); } + /** Raeumt alte heruntergeladene APK-Dateien aus dem Cache auf. */ + private async cleanupOldApks(): Promise { + try { + const files = await RNFS.readDir(RNFS.CachesDirectoryPath); + const apks = files.filter(f => /\.apk$/i.test(f.name)); + let freed = 0; + for (const f of apks) { + try { + const size = parseInt(f.size as any, 10) || 0; + await RNFS.unlink(f.path); + freed += size; + console.log(`[Update] Alte APK geloescht: ${f.name} (${(size / 1024 / 1024).toFixed(1)}MB)`); + } catch (err: any) { + console.warn(`[Update] APK-Loeschen fehlgeschlagen: ${f.name} (${err?.message || err})`); + } + } + if (apks.length > 0) { + console.log(`[Update] Cleanup fertig: ${apks.length} APKs entfernt, ${(freed / 1024 / 1024).toFixed(1)}MB freigegeben`); + } + } catch (err: any) { + console.warn(`[Update] Cleanup-Fehler: ${err?.message || err}`); + } + } + /** Bei App-Start Update pruefen */ checkForUpdate(): void { if (this.checking) return; @@ -111,6 +140,10 @@ class UpdateService { }); }); + // Vor dem Schreiben alte APKs im Cache wegraeumen — falls mehrere + // Updates in einer Session gezogen werden + await this.cleanupOldApks(); + // Base64 als APK-Datei speichern const destPath = `${RNFS.CachesDirectoryPath}/${apkData.fileName}`; await RNFS.writeFile(destPath, apkData.base64, 'base64');