630 votes

Solution INSTALL_FAILED_INSUFFICIENT_STORAGE erreur sur Android

Le INSTALL_FAILED_INSUFFICIENT_STORAGE d'erreur est le fléau de tous les Android du développeur de la vie. Il se produit indépendamment de la taille de l'application, ou la capacité de stockage est disponible. Le redémarrage du périphérique cible résout le problème brièvement, mais il vient bientôt de retour. Il y a des centaines (voire des milliers) de panneau de message messages de personnes me demandant pourquoi le problème se produit, mais les gens de chez Google sont désespérément muet sur la question.

Il existe une solution simple. Si votre appareil de test est en cours d'exécution Android 2.2 ou ultérieure, puis ajouter le android:installLocation attribut à votre demande le fichier de manifeste, avec la valeur "preferExternal". Cela va forcer l'installation de l'application sur le périphérique de stockage externe, comme un téléphone de la carte SD.

Par exemple:

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

Ce n'est plus un band-aid que une solution, et il peut ne pas être idéal si vous souhaitez que votre application à installer sur la mémoire interne du téléphone. Mais il aura au moins rendre le processus de développement beaucoup moins frustrant.

231voto

gabcas Points 131

Ce n'est qu'une solution temporaire et non pas une vraie solution.

Après avoir cela m'arrive à moi et de ne pas être heureux avec les réponses reçues à ce jour, je suis allé travailler en essayant de comprendre, à partir du PSBA source. J'ai trouvé une VRAIE solution.

Explication

Tout d'abord, un peu de (simplifié) de fond sur la façon d'Android installe et met à jour

La première fois qu'une application est installée:

  1. Le APK fichier est enregistré en tant que

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

Lorsque l'application est mise à jour:

  1. La mise à jour du fichier APK est enregistré en tant que:

    /data/app/-2.apk, paragraphe 2.apk)

  2. La première version (1.apk) est supprimé.

Sur notre prochaine mise à jour(s):

  1. La nouvelle APK est enregistré en tant que (1.apk) et (2.apk) est supprimé (Répéter indéfiniment).

 

Le problème que la plupart d'entre nous sont à avoir qui se passe lorsque l'application est mise à jour, mais la suppression de l'ancien APK échoue. Qui lui-même n'est pas encore la cause de la mise à jour échoue, mais il ne cause qu'il y a deux fichiers APK en /data/app.

La prochaine fois que vous essayez de mettre à jour l'application, le système ne peut pas déplacer ses fichiers temporaires parce que ni (1.apk) ni l'alinéa 2.apk) sont vides. Depuis Fichier#renameTo(Fichier) ne lance pas une exception, mais au lieu de cela renvoie un booléen PackageManager, ce n'est pas une façon de dire pourquoi il retourne INSTALL_FAILED_INSUFFICIENT_STORAGE même si la panne n'a rien à voir avec la quantité d'espace libre.

Solution

Exécuter:

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

OU

La désinstallation de l'application

Utiliser votre méthode préférée pour supprimer à la FOIS:

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

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

Assurez-vous que rien d'autre ne bloque les installations futures de manière similaire. Dans mon cas, j'ai eu un /data/app-lib/<full.package.name>-1 répertoire qui traînent autour de! Dans ce cas, une installation de la carte SD travaillé, et l'évolution ultérieure de mémoire interne, trop. (Création d' /data/app-lib/<full.package.name> sans -1 fin.)

Pourquoi d'autres "solutions" travaillé

  • Le code pour l'installation de stockage externe est sensiblement différente qui n'ont pas les mêmes problèmes

  • La désinstallation de l'application ne supprime qu'une seule version du fichier APK en /data/app. C'est pourquoi vous pouvez le réinstaller une fois, mais pas de mise à jour.

  • La quantité d'espace libre dans un émulateur n'est pas vraiment pertinent lorsque ce bug se produit

123voto

RacZo Points 5731

Vous avez besoin d'augmenter l'émulateur Android de la capacité de la mémoire. Il y a deux moyens pour cela:

  1. Cliquez-droit sur la racine de votre Projet Android, allez dans "Exécuter", puis aller à "Run Configurations...". Localisez le "Android Application" nœud dans l'arborescence à gauche, puis sélectionnez votre projet et allez à la "Cible" de l'onglet sur le côté droit de la fenêtre, regarder vers le bas pour les "Émulateur Options de Ligne de Commande" (il vous faudra parfois vous agrandissez la fenêtre) et enfin coller "-partition-taille 1024". Cliquez sur Appliquer, puis sur Exécuter pour utiliser votre émulateur.

  2. Aller à l' Éclipse de Préférences, puis sélectionnez "Lancer", Ajouter "-partition-taille 1024" sur le "Défaut émulateur option" champ. Cliquez sur "Appliquer" et l'utilisation de votre émulateur, comme d'habitude.

30voto

Louis Semprini Points 581

Merci de poster cette question. J'ai quelques autres idées qui pourraient aider certains développeurs.

Je suis le débogage mon application sur un périphérique (pas de l'émulateur). L'appareil dispose de 21 MO d'espace libre sur /data (comme l'a révélé par "df" "adb shell") et mon application est à seulement 5 MO. Cependant, je n'ai trouver que si j'ai supprimé d'autres applications sur l'appareil (sans redémarrer le téléphone ou le redémarrage adbd), INSTALL_FAILED_INSUFFICIENT_STORAGE serait aller pendant un certain temps et de revenir ensuite.

Il semble donc que le débogage mon 5 MO app exige plus de 20 MO d'espace en /data, et en outre quelque chose a eu des fuites à chaque fois que j'ai réglé mon application.

J'ai donc fait "adb shell" et répertorié l'ENSEMBLE de l' /data répertoire avec

cd /data
ls -a -l -R

Et j'ai regardé le 5000-sortie ligne pour voir où tout l'espace.

J'ai découvert de grandes quantités d'espace perdu sur mon appareil dans l' /data/klog répertoire sous la forme de vieux fichiers journaux à partir de mois de sessions de débogage.

Ce n'étaient pas mes fichiers journaux: ils ont été créés par une partie de l'Android de l'infrastructure.

J'ai supprimé et instantanément enregistrés 58 MO, qui n'a pas été attribué dans l'application des Paramètres pour toute application particulière. J'ai un petit appareil de façon à 58 MO est très important (environ 40%).

Jusqu'à présent, je n'ai pas eu INSTALL_FAILED_INSUFFICIENT_STORAGE à nouveau après de nombreuses pistes. Espérons qu'était la vraie question, bien que l'OP suggère que son appareil avait beaucoup d'espace (mais ne le dis pas combien).

J'espère que certains d'entre vous serez également en mesure d'échapper à INSTALL_FAILED_INSUFFICIENT_STORAGE en supprimant régulièrement /data/klog/*.

Ou, vous pouvez au moins faire l' ls -a -l -R en /data de voir où votre espace, si en effet il y a vraiment certain (caché) de l'espace de problème.

16voto

nasirkhan Points 597

J'avais ajouté une ligne supplémentaire à l'application le fichier de manifeste, qui est - android:installLocation="preferExternal". en utilisant cette ligne, il oblige à installer l'application sur le stockage externe. voir l'exemple ci-dessous,

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X