Dies ist nur eine vorübergehende Abhilfe und keine echte Lösung.
Nachdem mir das passiert war und ich mit den aktuellen Antworten nicht zufrieden war, machte ich mich an die Arbeit und versuchte, das Problem anhand der AOSP-Quelle zu lösen. Ich habe eine gefunden REAL Lösung.
Erläuterung
Zunächst einmal ein paar (vereinfachte) Hintergrundinformationen zur Android Installationen und Aktualisierungen
Das erste Mal, dass eine App installiert wird:
-
El APK Datei wird gespeichert als
/data/app/<full.package.name>-1.apk (1.apk)
Wann die App aktualisiert werden soll:
-
Die aktualisierte APK-Datei wird als gespeichert:
/data/app/<full.package.name>-2.apk (2.apk)
-
Die erste Version (1.apk) wird gelöscht.
Über unsere nächste(n) Aktualisierung(en):
- Die neue APK wird als (1.apk) gespeichert und (2.apk) wird gelöscht (für immer wiederholen).
Das Problem, das die meisten von uns haben, tritt auf, wenn die Anwendung aktualisiert wird, aber das Löschen der alten APK scheitert. Dies führt noch nicht dazu, dass die Aktualisierung fehlschlägt, aber es führt dazu, dass es zwei APK-Dateien in /data/app
.
Wenn Sie das nächste Mal versuchen, die App zu aktualisieren, kann das System die temporäre Datei nicht verschieben, da weder (1.apk) noch (2.apk) leer sind. Da File#renameTo(File) keine Ausnahme auslöst, sondern stattdessen einen booleschen PackageManager zurückgibt, gibt es keine Möglichkeit zu sagen, warum INSTALL_FAILED_INSUFFICIENT_STORAGE zurückgegeben wird, obwohl der Fehler nichts mit der Menge des freien Speichers zu tun hatte.
Lösung
Laufen:
adb shell "pm uninstall <full.packge.name>"
adb shell "rm -rf /data/app/<full.package.name>-*"
OR
Deinstallieren Sie die App
Verwenden Sie Ihre bevorzugte Methode zum Löschen BEIDE :
/data/app/<voll.paket.name>-1.apk
/data/app/<voll.paket.name>-2.apk
Stellen Sie sicher, dass nichts anderes zukünftige Installationen auf ähnliche Weise blockiert. In meinem Fall hatte ich eine /data/app-lib/<full.package.name>-1
Verzeichnis, das in der Nähe verweilt! In diesem Fall ist eine Installation in das Verzeichnis SD-Karte funktionierte, und auch eine spätere Umstellung auf den internen Speicher. (Erstellen /data/app-lib/<full.package.name>
ohne die -1
Ende).
Warum andere "Lösungen" funktionierten
-
Der Code für die Installation auf einem externen Speicherplatz unterscheidet sich erheblich von den anderen, die nicht die gleichen Probleme haben
-
Die Deinstallation der App löscht nur eine Version der APK-Datei in /data/app
. Deshalb können Sie es einmal neu installieren, aber nicht aktualisieren.
-
Die Menge an freiem Speicherplatz in einem Emulator ist nicht wirklich relevant, wenn dieser Fehler auftritt