Question Solution à l'erreur INSTALL_FAILED_INSUFFICIENT_STORAGE sur Android [fermé]


L'erreur INSTALL_FAILED_INSUFFICIENT_STORAGE est le fléau de la vie de tous les développeurs Android. Cela se produit quelle que soit la taille de l'application ou la quantité de stockage disponible. Le redémarrage du périphérique cible résout le problème brièvement, mais il revient rapidement. Il ya des centaines (si ce n'est des milliers) de messages sur les forums de personnes demandant pourquoi le problème se produit, mais les gens de Google sont frustrés silencieux sur la question.

Il existe une solution de contournement simple. Si votre appareil de test exécute Android 2.2 ou une version ultérieure, ajoutez le android: installLocation attribuer au fichier manifeste de votre application, avec la valeur "preferExternalCela va forcer l'application à être installée sur le stockage externe de l'appareil, comme la carte SD d'un téléphone.

Par exemple:

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

Il s'agit plus d'un pansement que d'un correctif, et cela peut ne pas être idéal si vous voulez que votre application terminée s'installe sur la mémoire interne de l'appareil. Mais cela rendra au moins le processus de développement beaucoup moins frustrant.


442


origine


Réponses:


Ceci est seulement un solution temporaire et pas une vraie solution.

Après que cela m'ait arrivé et ne pas être satisfait des réponses actuelles, je suis allé travailler en essayant de le comprendre à partir de la source AOSP. J'ai trouvé un RÉAL Solution.

Explication

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

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

  1. le APK le fichier est enregistré en tant que

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

Lorsque l'application doit être mise à jour:

  1. Le fichier APK mis à jour est enregistré sous:

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

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

Sur nos prochaines mises à jour:

  1. Le nouveau fichier APK est enregistré sous (1.apk) et (2.apk) est supprimé (Répéter pour toujours).

Le problème que la plupart d'entre nous rencontrons se produit lorsque l'application est mise à jour, mais la suppression de l'ancien APK échoue. Ce qui ne provoque pas encore l'échec de la mise à jour, mais il y a deux fichiers APK dans /data/app.

La prochaine fois que vous essayez de mettre à jour l'application, le système ne peut pas déplacer son fichier temporaire car ni (1.apk) ni (2.apk) ne sont vides. Puisque le fichier # renameTo (Fichier) ne renvoie pas d'exception mais renvoie un PackageManager booléen, il n'a aucun moyen de savoir pourquoi il renvoie INSTALL_FAILED_INSUFFICIENT_STORAGE même si l'échec n'a rien à voir avec la quantité d'espace libre.

Solution

Courir:

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

OU

Désinstallez l'application

Utilisez votre méthode préférée pour supprimer TOUS LES DEUX:

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

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

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

Pourquoi d'autres "solutions" ont fonctionné

  • Le code pour l'installation sur le stockage externe est significativement différent, ce qui n'a pas les mêmes problèmes

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

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


141



Vous devez augmenter la capacité de mémoire de l'émulateur Android. Il y a deux façons pour cela:

  1. Faites un clic droit sur la racine de votre projet Android, allez dans "Exécuter en tant que" puis allez dans "Configurer les configurations ...". Localisez le nœud "Application Android" dans l'arborescence sur la gauche, puis sélectionnez votre projet et allez dans l'onglet "Cible" sur le côté droit de la fenêtre, cherchez le champ "Additional Emulator Command Line Options" (parfois vous ' ll faut agrandir la fenêtre) et enfin coller "-partition-size 1024" là. Cliquez sur Appliquer, puis sur Exécuter pour utiliser votre émulateur.

  2. Aller à Eclipse Préférences, puis sélectionnez "Lancer" Ajouter "-partition-taille 1024" sur le "Option émulateur par défaut". Cliquez sur "Appliquer" et utilisez votre émulateur comme d'habitude.


98



Merci d'avoir posté cette question. J'ai quelques idées supplémentaires qui peuvent aider certains développeurs.

Je débogue mon application sur un périphérique (pas l'émulateur). L'appareil dispose de 21 Mo gratuits sur /data (comme révélé par "df" en faisant "adb shell") et mon application est à seulement 5 Mo. Cependant, j'ai trouvé que si je supprimais d'autres applications sur l'appareil (sans redémarrer le téléphone ou redémarrer adbd), INSTALL_FAILED_INSUFFICIENT_STORAGE s'en irait pendant un moment et reviendrait.

Donc, il semble que le débogage de mon application de 5 Mo nécessite plus de 20 Mo d'espace dans /data, et en plus quelque chose fuyait chaque fois que je déboguais mon application.

J'ai donc fait "adb shell" et énuméré le ENTIRE /data répertoire avec

cd /data
ls -a -l -R

Et j'ai regardé la sortie de 5000 lignes pour voir où tout l'espace allait.

J'ai découvert de grandes quantités d'espace perdu sur mon appareil dans le /data/klog annuaire sous la forme d'anciens fichiers journaux de sessions de débogage datant de plusieurs mois.

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

Je les ai supprimés et j'ai immédiatement enregistré 58 Mo qui n'étaient pas attribués dans l'application Paramètres à une application en particulier. J'ai un petit appareil donc 58 Mo est très important (environ 40%).

Jusqu'à présent, je n'ai pas encore reçu INSTALL_FAILED_INSUFFICIENT_STORAGE après plusieurs essais. Espérons que c'était le vrai problème, même si le PO suggère que son appareil avait beaucoup d'espace (mais n'a pas dit combien).

J'espère que certains d'entre vous pourront également échapper INSTALL_FAILED_INSUFFICIENT_STORAGE en supprimant périodiquement /data/klog/*.

Ou, vous pouvez au moins faire le ls -a -l -R dans /data pour voir où va tout votre espace, s'il y a vraiment un problème d'espace (caché).


26



Je l'ai résolu en incluant android:installLocation="auto" à l'intérieur <manifest> tag dans le fichier AndroidManifest.xml.


15



J'avais ajouté une ligne supplémentaire au fichier manifeste de l'application, 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" >

14



Les aides suivantes:

  • Ouvrez un shell sur l'appareil

    adb shell
    
  • Accédez au répertoire temporaire dans lequel le fichier APK entrant est copié pour la première fois

    cd /data/local/tmp
    
  • Lister les fichiers disponibles et supprimer comme souhaité

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

Cela a été fiable pour moi jusqu'à présent sur un appareil réel.


MODIFIER: Cela s'est avéré être une solution moins fiable que celle ci-dessus.

J'ai essayé un certain nombre de solutions. Rien n'a vraiment aidé. Enfin, j'ai trouvé une application appelée SD Maid. Cela a aidé.

Il indique que la fonctionnalité est limitée sur les périphériques non racinés. Le mien est enraciné, donc ce serait bien de voir des personnes efficaces dans ces scénarios et si c'était juste un coup de chance qui a fonctionné pour moi (c'est un problème imprévisible de toute façon).

REMARQUE: Je n'ai rien à voir avec l'application. Je l'ai trouvé avec une recherche.


14



Un problème lié à l'émulateur est lorsqu'il n'y a plus d'espace dans le /data cloison.

Par exemple,

% 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

Voici un exemple de vue de la /data/app annuaire:

% 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

J'ai enlevé le supplément APK des dossiers. Il semble qu'à chaque installation, vous obtenez un nouveau fichier APK. Supprimez simplement les fichiers APK supplémentaires.

Par exemple,

adb shell rm /data/app/com.brooklynmarathon.calendarapi2-1.apk

8



Je me sens un peu bizarre en écrivant ceci, mais je ne peux pas être sûr à 100% que c'est pas vrai dans certains cas (ça a marché pour moi). Si vous avez eu les symptômes suivants:

  • Vous avez utilisé un périphérique physique (dans mon cas, Samsung Galaxy Ace),
  • Vous avez développé pendant quelques jours d'affilée,
  • Votre téléphone était connecté tout le temps, jour et nuit.
  • Vous avez commencé à recevoir cette erreur après quelques jours, et cela ne cessait de s'aggraver.
  • Aucun des autres réponses ont travaillé pour vous.
  • Vous êtes aussi résigné que j'étais ...

Ensuite, essayez ceci:

  • Débranchez votre téléphone lorsque vous ne travaillez pas!

J'ai débranché mon téléphone et je l'ai laissé reposer pour la journée entière. Ma batterie s'est un peu éteinte. Après cela, je l'ai reconnecté et j'ai recommencé à déboguer. Tout a bien fonctionné cette fois! Et je veux dire vraiment vraiment bien, comme avant.

Est-il possible que cette erreur puisse être due à matériel matériel lié à la batterie? Cela me fait encore bizarre de penser de cette façon, mais maintenant je continue à débrancher mon téléphone de temps en temps (et pour la nuit) et le problème n'est pas revenu.


6