it-swarm.com.de

Lösung für den Fehler INSTALL_FAILED_INSUFFICIENT_STORAGE auf Android

Der INSTALL_FAILED_INSUFFICIENT_STORAGE -Fehler ist der Fluch des Lebens eines jeden Android Entwicklers. Dies geschieht unabhängig von der App-Größe oder dem verfügbaren Speicherplatz. Durch einen Neustart des Zielgeräts wird das Problem kurz behoben, es wird jedoch bald wieder hergestellt. Es gibt hunderte (wenn nicht tausende) Message-Board-Posts von Leuten, die sich erkundigen, warum das Problem auftritt, aber die Leute bei Google schweigen frustrierend zu diesem Thema.

Es gibt eine einfache Problemumgehung. Wenn auf Ihrem Testgerät Android 2.2 oder höher ausgeführt wird, fügen Sie das Android:installLocation -Attribut mit dem Wert "preferExternal" zur Manifestdatei Ihrer Anwendung hinzu. Dadurch wird die App auf dem externen Speicher des Geräts installiert, z. B. auf der SD-Karte eines Telefons.

Zum Beispiel:

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
          package="com.andrewsmith.Android.darkness"
          Android:installLocation="preferExternal"

Dies ist eher eine Hilfe als ein Fix und möglicherweise nicht ideal, wenn Sie möchten, dass Ihre fertige App im internen Speicher des Geräts installiert wird. Aber es wird zumindest den Entwicklungsprozess viel weniger frustrierend machen.

495
Andrew Smith

Dies ist nur eine vorübergehende Problemumgehung und keine echte Lösung.

Nachdem mir dies passiert war und ich mit den aktuellen Antworten nicht zufrieden war, machte ich mich an die Arbeit, um es aus der AOSP-Quelle herauszufinden. Ich habe eine ECHTE Lösung gefunden.

Erläuterung

Zunächst ein bisschen (vereinfachter) Hintergrund darüber, wie Android installiert und aktualisiert wird

Das erste Mal, wenn eine App installiert wird:

  1. Die Datei APK wird gespeichert als

    /data/app/-1.apk (1.apk)

Wann die App aktualisiert werden soll:

  1. Die aktualisierte APK-Datei wird gespeichert als:

    /data/app/-2.apk (2.apk)

  2. Die erste Version (1.apk) wird gelöscht.

Bei unseren nächsten Updates:

  1. Das neue APK wird als (1.apk) gespeichert und (2.apk) gelöscht (für immer wiederholen).

Das Problem, das die meisten von uns haben, tritt auf, wenn die Anwendung aktualisiert wird, das Löschen der alten APK jedoch fehlschlägt. Was selbst noch nicht dazu führt, dass das Update fehlschlägt, aber dass es zwei APK-Dateien in /data/app gibt.

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, kann nicht festgestellt werden, warum INSTALL_FAILED_INSUFFICIENT_STORAGE zurückgegeben wird, obwohl der Fehler nichts mit der Menge des freien Speicherplatzes zu tun hat.

Lösung

Lauf:

adb Shell "pm uninstall <full.packge.name>"
adb Shell "rm -rf /data/app/<full.package.name>-*"

ODER

Deinstalliere die App

Verwenden Sie Ihre bevorzugte Methode, um _ beide _ zu löschen :

/data/app/<full.package.name>-1.apk

/data/app/<full.package.name>-2.apk

Stellen Sie sicher, dass keine anderen Elemente zukünftige Installationen auf ähnliche Weise blockieren. In meinem Fall hatte ich ein /data/app-lib/<full.package.name>-1 -Verzeichnis! In diesem Fall hat eine Installation auf die SD-Karte und eine anschließende Verschiebung in den internen Speicher ebenfalls funktioniert. (Erstellen von /data/app-lib/<full.package.name> ohne das Ende von -1.)

Warum andere "Lösungen" funktionierten

  • Der Code für die Installation auf einem externen Speicher unterscheidet sich erheblich und weist nicht dieselben Probleme auf

  • Beim Deinstallieren der App wird nur eine Version der APK-Datei in /data/app gelöscht. Aus diesem Grund 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

164
gabcas

Sie müssen die Speicherkapazität des Android Emulators erhöhen. Dafür gibt es zwei Möglichkeiten:

  1. Klicken Sie mit der rechten Maustaste auf das Stammverzeichnis Ihres Android -Projekts, wechseln Sie zu "Ausführen als" und dann zu "Konfigurationen ausführen ...". Suchen Sie den Knoten "Android-Anwendung" in der Baumstruktur auf der linken Seite und wählen Sie Ihr Projekt aus. Gehen Sie zur Registerkarte "Ziel" auf der rechten Seite des Fensters und suchen Sie nach dem Feld "Zusätzliche Emulator-Befehlszeilenoptionen". Das Fenster muss vergrößert werden.) Fügen Sie schließlich "-partition-size 1024" ein. Klicken Sie auf Übernehmen und dann auf Ausführen, um Ihren Emulator zu verwenden.

  2. Gehen Sie zu Eclipse's Preferences und wählen Sie dann "Launch" Add "-partition-size 1024" im Feld "Default Emulator Option". Klicken Sie auf "Übernehmen" und verwenden Sie Ihren Emulator wie gewohnt.

108
Oscar S.

Vielen Dank, dass Sie diese Frage gestellt haben. Ich habe einige zusätzliche Erkenntnisse, die einigen Entwicklern helfen können.

Ich debugge meine Anwendung auf einem Gerät (nicht auf dem Emulator). Das Gerät hat 21 MB freien Speicherplatz auf /data (wie "df" bei "adb Shell" angibt) und meine App hat nur 5 MB. Ich habe jedoch festgestellt, dass INSTALL_FAILED_INSUFFICIENT_STORAGE für eine Weile nicht mehr angezeigt wird, wenn ich andere Apps auf dem Gerät lösche (ohne das Telefon neu zu starten oder adbd neu zu starten) und dann zurückkomme.

Es scheint also, dass das Debuggen meiner 5-MB-App mehr als 20 MB Speicherplatz in /data erfordert. Außerdem ist bei jedem Debuggen meiner App ein Leck aufgetreten.

Also habe ich "adb Shell" gemacht und das GESAMTE /data -Verzeichnis mit aufgelistet

cd /data
ls -a -l -R

Und ich schaute auf die Ausgabe mit 5000 Zeilen, um zu sehen, wohin der gesamte Speicherplatz führte.

Ich entdeckte nmengen an verschwendetem Speicherplatz auf meinem Gerät im Verzeichnis /data/klog in Form alter Protokolldateien aus monatelangen Debugsitzungen.

Dies waren nicht meine Protokolldateien: Sie wurden von einem Teil der Android Infrastruktur erstellt.

Ich habe sie gelöscht und sofort 58 MB gespeichert, die in der Einstellungen-App keiner bestimmten App zugeordnet wurden. Ich habe ein kleines Gerät, daher sind 58 MB sehr wichtig (ungefähr 40%).

Bisher habe ich INSTALL_FAILED_INSUFFICIENT_STORAGE nach vielen Durchläufen nicht mehr erhalten. Hoffen wir, dass dies das eigentliche Problem war, obwohl das OP darauf hindeutet, dass sein Gerät über ausreichend Speicherplatz verfügt (ohne zu sagen, wie viel).

Hoffentlich können einige von Ihnen auch INSTALL_FAILED_INSUFFICIENT_STORAGE durch periodisches Löschen von /data/klog/* umgehen.

Oder Sie können zumindest den ls -a -l -R in /data ausführen, um zu sehen, wohin Ihr gesamter Speicherplatz führt, wenn tatsächlich ein (verstecktes) Speicherplatzproblem vorliegt.

28
Louis Semprini

Folgendes hilft:

  • Öffnen Sie eine Shell für das Gerät

    adb Shell
    
  • Navigieren Sie zu dem temporären Verzeichnis, in das das eingehende APK zuerst kopiert wird

    cd /data/local/tmp
    
  • Liste die verfügbaren Dateien auf und lösche sie wie gewünscht

    rm * // use at your own risk, good practice to list files first
    

Dies war für mich bisher auf einem tatsächlichen Gerät zuverlässig.


EDIT: Dies stellte sich als nicht so zuverlässige Lösung heraus wie die oben beschriebene.

Ich habe eine Reihe von Lösungen ausprobiert. Nichts hat wirklich geholfen. Endlich habe ich eine App namens SD Maid gefunden. Das hat geholfen.

Es heißt, dass die Funktionalität auf Geräten ohne Root-Zugriff eingeschränkt ist. Meins ist verwurzelt, also wäre es gut zu sehen, wie effektiv es in diesen Szenarien ist, und wenn es nur ein Zufall wäre, dass es für mich funktioniert (es ist sowieso ein unvorhersehbares Problem).

HINWEIS: Ich habe nichts mit der App zu tun. Habe es mit einer Suche gefunden.

20
Saad Farooq

Ich hatte der Manifestdatei der Anwendung eine zusätzliche Zeile hinzugefügt, nämlich Android:installLocation="preferExternal". Durch die Verwendung dieser Zeile wird die Installation der App auf dem externen Speicher erzwungen. siehe das Beispiel unten,

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.nasir.phonegap"
    Android:installLocation="preferExternal" >
16
nasirkhan

Ich habe es gelöst, indem ich Android:installLocation="auto" in <manifest> -Tag in die AndroidManifest.xml-Datei aufgenommen habe.

15
user3278416

Ein verwandtes Problem im Emulator ist, wenn in der Partition /data kein Platz mehr vorhanden ist.

Zum Beispiel,

% adb Shell df

Filesystem             Size   Used   Free   Blksize
/dev                   252M    32K   252M   4096
/mnt/asec              252M     0K   252M   4096
/mnt/obb               252M     0K   252M   4096
/system                154M   154M     0K   4096
/data                   64M    57M     6M   4096
/cache                  64M     1M    62M   4096

Hier ist eine Beispielansicht des Verzeichnisses /data/app:

% adb Shell ls -l /data/app

-rw-r--r-- system   system      19949 2011-10-12 17:09 CubeLiveWallpapers.apk
-rw-r--r-- system   system      27670 2011-10-12 17:09 GestureBuilder.apk
-rw-r--r-- system   system      34341 2011-10-12 17:09 SoftKeyboard.apk
-rw-r--r-- system   system      20151 2011-10-12 17:09 WidgetPreview.apk

Ich habe die zusätzlichen APK Dateien entfernt. Es scheint, dass Sie bei jeder Installation eine neue APK-Datei erhalten. Entfernen Sie einfach die zusätzlichen APK-Dateien.

Zum Beispiel,

adb Shell rm /data/app/com.brooklynmarathon.calendarapi2-1.apk
9
Ralph Yozzo

In meinem Fall wurde der Fehler durch die App com.Android.providers.media verursacht. Ich habe dies auf dem x86 Android Emulator erlebt. Was habe ich getan:

$ adb Shell df
Filesystem             Size   Used   Free   Blksize
...
/data                  224M   209M    14M   4096
....

Zu wenig freier Speicherplatz auf /data

$ adb Shell du /data
...
409870  /data/data/com.Android.providers.media
...

Fast alles wurde von einer einzigen App verbraucht! Es ist eine System-App, daher halte ich es für besser, sie nicht zu löschen. Stattdessen habe ich App-Daten aufgeräumt.

$ adb Shell pm clear com.Android.providers.media
Success
$ adb Shell df
Filesystem             Size   Used   Free   Blksize
...
/data                  224M     8M   215M   4096
...

Die Festplatte wurde gelöscht und die App erfolgreich installiert.

9
Sergey Fedorov

Beantwortung des allerersten Beitrags zu diesem Thema ...

Symptom: Einige Apps werden nicht installiert, da kein Speicherplatz vorhanden ist und in Wirklichkeit sowohl auf dem internen als auch auf dem externen Speicher genügend Speicherplatz frei ist !!! Lösung: Deaktivieren Sie die externe Installation standardmäßig.

Externe Installation per Defaut einstellen:

adb Shell pm set-install-location 2

Verhindert die Installation auf vielen Apps, die nicht extern installiert werden können (z. B. Adblock + oder so)

Dann ist die Lösung

adb Shell pm set-install-location 0

Oder

adb Shell pm set-install-location 1

0: auto (if one is full - or irrelevant !!! - it select the other)
1: internal
2: external
6
dan

Ich fühle mich ein bisschen komisch, wenn ich das schreibe, aber ich kann nicht 100% sicher sein, dass es nicht wahr in in einigen Fällen (es hat bei mir funktioniert). Wenn Sie die folgenden Symptome hatten:

  • Sie haben mit einem physischen Gerät gearbeitet (in meinem Fall Samsung Galaxy Ace),
  • Sie haben gerade für ein paar Tage entwickelt,
  • Ihr Telefon war die ganze Zeit verbunden, Tag und Nacht.
  • Du hast nach ein paar Tagen angefangen, diesen Fehler zu bekommen, und es wurde immer schlimmer.
  • Keine der anderen Antworten hat für Sie funktioniert.
  • Du bist so resigniert wie ich ...

Dann versuchen Sie Folgendes:

  • Ziehen Sie den Netzstecker, wenn Sie nicht arbeiten!

Ich zog mein Telefon aus der Steckdose und ließ es für den GANZEN TAG ruhen. Mein Akku hat sich etwas erschöpft. Danach habe ich es wieder angeschlossen und wieder mit dem Debuggen begonnen. Diesmal hat alles gut geklappt! Und ich meine wirklich sehr gut, genau wie zuvor.

Ist es möglich, dass dieser Fehler auf etwas akkubezogenes Hardware-Zeug zurückzuführen ist? Es fühlt sich immer noch komisch an, so zu denken, aber jetzt trenne ich mein Telefon immer wieder ab und zu (und für die Nacht) und das Problem ist nicht zurückgekehrt.

6
wrygiel

Samsung Galaxy Ace kündigt 158 ​​MB internen Speicher in seinen Spezifikationen an, aber die Kernanwendungen und -dienste verbrauchen ungefähr 110 MB davon (ich habe den Task-Manager verwendet) das Gerät, um dies zu überprüfen). Meine App hatte 52 MB, weil sie viele Assets hatte. Nachdem ich einige dieser Dateien auf 45 MB gelöscht hatte, konnte die App problemlos installiert werden. Das Gerät warnte mich immer noch, dass der interne Speicher fast voll war, und ich sollte einige Apps deinstallieren, obwohl ich nur eine App installiert hatte.

Nach der Installation einer Release-Version des APK-Bundles und der anschließenden Deinstallation werden auf meinem Gerät 99 MB freier Speicherplatz angezeigt, sodass möglicherweise Informationen auf dem Gerät ausgeblendet werden. Siehe Louis Semprinis Antwort .

5
snez

In Eclipse

Run -- > Debug Configurations --> Select "target", und wählen Sie ein bevorzugtes Emulatorziel zum Starten aus.

Fügen Sie unter "Zusätzliche Emulator-Befehlszeilenoptionen" Folgendes hinzu:

- Partitionsgröße 1024

Schließen Sie dann den Emulator und klicken Sie auf das Debug-Symbol, um den von Ihnen ausgewählten Emulator zu starten.

enter image description here

Ich hoffe es hilft...!

4
Strider

Da dieses Problem immer noch besteht, dachte ich, ich würde RacZos Antwort zu Entwicklungszwecken etwas hinzufügen. Wenn Sie nicht das Eclipse -Plugin verwenden oder aus irgendeinem Grund nicht die Quelle, sondern nur die .apk-Datei haben, können Sie die Partitionsgröße über die Befehlszeile mit derselben Option erhöhen Starte den Emulator:

emulator -avd <emulator name> -partition-size 1024

Soweit ich weiß, ist diese Option bei developer.Android.com nicht dokumentiert. Daher dachte ich, ich würde sie hier posten, damit die Leute diese Lösung finden.

3
DrBwaa

Ich bin mit meinem neuen Nexus 4 und einem mit Adobe AIR erstellten APK auf dieses Problem gestoßen. Ich hatte bereits Android: installLocation = "preferExternal" in meinem Manifest. Ich bemerkte, dass ich auch adb install mit der Option -s anrief (Paket auf dem freigegebenen Massenspeicher wie z. B. SD-Karte installieren), was wie ein Overkill aussah.

Das Entfernen des -s Flags von adb install hat das Problem für mich behoben.

3
Sarah Northway

Wenn Sie ein echtes Gerät verwenden, ist einfach der interne Speicher voll. Gehen Sie einfach zu Android settings -> Applications und verschieben Sie einige Apps auf die SD-Karte oder deinstallieren Sie einige Apps.

Wenn Sie den Emulator verwenden, lesen Sie RacZos Antwort .

2
marmor

Ich bin auf den gleichen Fehler gestoßen, als ich nach einer vollständigen ROM-Installation über das ADB Shell-Programm versucht habe, ca. 50 Apps im Batch-Verfahren im SD-Karte -Verzeichnis zu installieren. aktualisieren:

for x in *.apk; do pm install -r $x; done

Einige von ihnen wurden installiert, aber viele scheiterten mit dem Fehler INSTALL_FAILED_INSUFFICIENT_STORAGE. Alle fehlgeschlagenen Apps enthielten Leerzeichen. Ich habe sie stapelweise umbenannt und es erneut versucht. Diesmal hat alles geklappt. Ich habe nicht neu gestartet oder so. Vielleicht ist dies nicht das Problem, mit dem ihr konfrontiert seid, aber dies könnte jemandem helfen, der mit dem gleichen Problem sucht, mit dem ich konfrontiert war.

2
Insilico

Deinstallieren Sie die Anwendung einfach vom Emulator über die Befehlszeile oder gehen Sie zu den Einstellungen und deinstallieren Sie die Anwendung. Dies verhindert, dass der Fehler auftritt.

2
Nagendra

Ich habe folgendes versucht:

  • Startete mein Gerät neu
  • Vorherige APK gelöscht
  • Baue meine APK neu auf
  • Deinstallieren Sie meine vorherige Kopie auf dem Gerät
  • Neu installieren

Überprüfen Sie, ob es bei Ihnen genauso funktioniert.

2
CoolRunning

Ich bin auf diese Frage gestoßen, weil ich diesen Fehler beim Installieren von Apps auf meinem eigentlichen Telefon mithilfe der Sideload Wonder Machine erhalten habe. Ich fand das Problem, dass ich mehrere .apk-Dateien im Verzeichnis/payload hatte. Ich dachte, dies würde unterstützt, aber als ich alle bis auf eine .apk entfernte, verschwand der Fehler.

2
KC Baltz

Die Lösung ist einfach.

Öffnen Sie den AVD Manager. Bearbeiten Sie Ihre AVD.

Unten im Hardware-Bereich sind einige Eigenschaften aufgeführt, die mit "Neu ..." und "Löschen" rechts davon gekennzeichnet sind.

Drücken Sie Neu. Wählen Sie die Größe der Datenpartition. Stellen Sie "512MB" ein (die MB sind erforderlich). Und du bist fertig. Wenn Sie weiterhin Probleme haben, vergrößern Sie auch Ihre System- und Cache-Partitionen mit der gleichen Methode.

Hier ist alles dokumentiert: http://developer.Android.com/guide/developing/devices/managing-avds.html

1
Zaid Daghestani

Nachdem ich alles andere in diesem Thread ausprobiert hatte, stellte ich fest, dass mein eigenes Problem darin bestand, dass der Pfad zur APK-Datei zu lang war. Also ging ich zu dem Verzeichnis, in dem sich die .apk befand und tat:

cd /Very/Long/Path/To/Package/
adb install mypackage.apk

anstatt von

adb install /Very/Long/Path/To/Package/mypackage.apk

Und es hat funktioniert ... einfach gut installiert.

Ich dachte nur, das könnte jemand anderem helfen.

1
Alma

Emulatorlösung

Öffnen Sie das Verzeichnis .Android. Normalerweise in Ihrem Home-Verzeichnis. Gehen Sie dann zu avd und öffnen Sie das Verzeichnis mit dem Namen der avd, die Sie ändern möchten.

Bearbeiten Sie nun die Datei config.ini und fügen Sie die folgende Zeile hinzu oder ändern Sie die folgende Zeile:

disk.dataPartition.size=1024

Wobei 1024 die Größe ist, die Sie in MB verwenden möchten. Speichern Sie die Datei und starten Sie den Emulator mit aktiviertem wipe user data. Ihr Emulator sollte nun die neue Größe haben.

1
prolink007

Ich habe heute diesen Fehler erhalten, als ich mein Telefon zum Testen/Debuggen mit Eclipse verwendet habe.

Mein Fehler war, dass ich im Anwendungsnamen norwegische Sonderzeichen ("æ", "ø", "å") verwendet habe. Als ich den App-Namen überarbeitet habe (mit "o" anstelle von "ø"), wurde die App korrekt installiert.

Wahrscheinlich nicht Ihr Problem, könnte aber für andere Menschen den gleichen Fehler anzeigen.

1
EirikO

Wenn Sie Ihre Anwendung auf einem Emulator ausführen und dieses Problem weiterhin besteht, überprüfen Sie Ihren Benachrichtigungsmanager. Wenn ein Symbol und eine Benachrichtigung angezeigt werden, dass der Telefonspeicher voll ist, haben Sie bereits so viele Anwendungen auf Ihrem Emulator installiert. Deinstallieren Sie mehrere Anwendungen, die Sie derzeit nicht möchten, über "Einstellungen >> Anwendung verwalten >> Anwendung auswählen >> Deinstallieren".
Das Set.
Führen Sie nun das Programm erneut aus.

1
Rax

Stellen Sie sicher, dass Sie Ihr Android Gerät nicht mit USB verbinden, während Sie versuchen, den Emulator auszuführen

1
Sharpless512

Problemumgehung:

Kompiliere als 2.1 ohne Android:installLocation="preferExternal".

OK?

Kompiliere wie 2.2 einschließlich Android:installLocation="preferExternal".

Dies wird weiterhin in SDK-Versionen unter 8 installiert (das XML-Tag wird ignoriert).

0
Team Pannous

Auch ich hatte das gleiche Problem, und ich habe einen "Factory Data Reset" durchgeführt, und danach hat es gut funktioniert.

0
Monish

Ich hatte auf meinem Telefon keinen Root-Zugriff und bin nicht darauf vorbereitet, dass meine App auf der SD-Karte installiert wird. Auf /data/ stehen 15 MB Speicherplatz zur Verfügung, und meine Bewerbung ist kleiner als 2 MB.

Für eine Weile kam ich durch; Bereinigen des Eclipse -Projekts und Neustarten des Telefons, aber schließlich funktionierte das nicht mehr (wahrscheinlich nach einem Update).

Das Bereinigen des Anwendungscaches hat das Problem für mich gelöst und erfordert keinen Neustart des Telefons oder keine Deinstallation der App.

Es gibt Anwendungen auf dem Markt, mit denen Sie den Cache mehrerer Anwendungen gleichzeitig leeren können. Suche nach "sauber".

0
J0hnG4lt

In meinem Fall wurde dies durch Erhöhen des erweiterten Speichers von Eclipse behoben, indem der Wert von - Xmx768m in Eclipse.ini geändert wurde

0
santhosh

Ein bisschen zeitaufwändig, sollte aber auf jeden Fall funktionieren:

Über USB verbinden und USB-Speicher aktivieren. Kopieren Sie die Datei APK von Ihrem lokalen Build auf das Telefon (möglicherweise müssen Sie unbekannte Quellen in den Anwendungseinstellungen zulassen).

Tippen Sie dann einfach auf die APK-Datei und Android installiert sie. Wie ich schon sagte, es ist zeitaufwändig, aber es könnte schneller sein, als ab und zu neu zu starten.

0
jcfrei

Am Ende habe ich die App vom Gerät deinstalliert und sie dann wieder in Eclipse installiert. Dies ist ein Problem, das ich durch die regelmäßige Verwendung meines Geräts immer wieder bekomme, aber heute habe ich diese Meldung aus der Entwicklung erhalten.

0
Roberto