Solution à INSTALL_FAILED_INSUFFICIENT_STORAGE erreur sur Android

L'erreur INSTALL_FAILED_INSUFFICIENT_STORAGE est la perte de la vie de chaque développeur Android. Cela se produit indépendamment de la taille de l'application, ou de la quantité de stockage disponible. Le redémarrage du périphérique cible corrige le problème brièvement, mais il revient bientôt. Il y a des centaines (sinon des milliers) de messages du forum des personnes demandant pourquoi le problème se produit, mais les gens de Google sont silencieux sur le problème.

Il existe une solution de contournement simple. Si votre périphérique de test exécute Android 2.2 ou version ultérieure, ajoutez l'attribut android: installLocation au fichier manifeste de votre application, avec la valeur " preferExternal ". Cela obligera 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 plutôt d'une aide à la bande que d'un correctif, et ce n'est peut-être pas idéal si vous souhaitez que votre application terminée soit installée sur la mémoire interne de l'appareil. Mais au moins, cela rendra le processus de développement beaucoup moins frustrant.

  • Installer Android APK sans invite
  • Comment utiliser Google Analytics pour suivre l'installation de référence à partir de Google Play?
  • Installez / désinstallez APK par programme (PackageManager vs Intents)
  • Installation silencieuse sur les appareils Android
  • Comment installer l'application deux fois sans interférence dans Android?
  • "Il y a un problème à analyser le paquet"
  • L'installation de Android Studio sur Windows 7 échoue, aucun JDK n'a trouvé
  • Code d'erreur Android lollipop -505 lors de l'application d'installation
  • 30 Solutions collect form web for “Solution à INSTALL_FAILED_INSUFFICIENT_STORAGE erreur sur Android”

    Ceci n'est qu'une solution de contournement temporaire et non une solution réelle.

    Après m'être 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é une solution REAL .

    Explication

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

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

    1. Le fichier APK 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é comme suit:

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

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

    Sur notre prochaine mise à jour:

    1. Le nouvel APK est enregistré en tant que (1.apk) et (2.apk) est supprimé (Repeat forever).

    Le problème que la plupart d'entre nous ont survenu lorsque l'application est mise à jour, mais la suppression de l'ancien APK échoue. Ce qui ne provoque pas encore la mise à jour de la mise à jour, mais il en résulte 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 pas vides. Puisque File # renameTo (File) ne lance pas une exception, mais renvoie un PackageManager booléen, il n'a aucun moyen de dire pourquoi il retourne 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ésinstaller l'application

    Utilisez votre méthode préférée pour supprimer BOTH :

    /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 d'une manière similaire. Dans mon cas, j'ai eu un répertoire /data/app-lib/<full.package.name>-1 ! Dans ce cas, une installation sur la carte SD a fonctionné, et un déplacement ultérieur vers la mémoire interne, aussi. (Création /data/app-lib/<full.package.name> sans la fin de -1 ).

    Pourquoi d'autres "solutions" ont fonctionné

    • Le code pour l'installation sur un 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 ne pas le mettre à jour.

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

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

    1. Cliquez avec le bouton droit de la souris sur la racine de votre projet Android, passez à "Exécuter sous", puis accédez à "Exécuter les configurations …". Localisez le nœud «Application Android» dans l'arborescence à gauche, puis sélectionnez votre projet et accédez à l'onglet «Cible» situé sur le côté droit de la fenêtre, recherchez le champ «Additional Emulator Command Line Options Options» (parfois, Il faudra faire la fenêtre plus grande) et finalement coller "-parttion-size 1024" là-bas. Cliquez sur Appliquer puis sur Exécuter pour utiliser votre émulateur.

    2. Accédez aux Préférences d' Eclipse , puis sélectionnez "Lancer" Ajouter "-partition-size 1024" dans le champ "Option émulateur par défaut". Cliquez sur "Appliquer" et utilisez votre émulateur comme d'habitude.

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

    Je débogue ma demande sur un périphérique (pas l'émulateur). Le périphérique dispose de 21 Mo libre sur /data (comme révélé par "df" lors de la création de "shell adb") et mon application est à seulement 5 Mo. Cependant, j'ai trouvé que si j'ai supprimé d'autres applications sur le périphérique (sans redémarrer le téléphone ou redémarrer adbd), INSTALL_FAILED_INSUFFICIENT_STORAGE disparaitrait pendant un certain temps, puis revenir.

    Donc, il semble que le débogage de mes applications de 5 Mo requiert plus de 20 Mo d'espace dans /data , et en plus quelque chose a été fuites à chaque fois que j'ai débogué mon application.

    Donc j'ai fait "shell adb" et ai énuméré l'ENTIER /data répertoire de /data 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 vastes quantités d'espace perdu sur mon appareil dans le répertoire /data/klog sous la forme d'anciens fichiers journaux à partir de sessions de débogage 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 sauvegardé instantanément 58 Mo qui n'a pas été attribué dans l'application Paramètres à une application particulière. J'ai un petit appareil, donc 58 Mo est très important (environ 40%).

    Jusqu'à présent, je n'ai pas encore réinstallé INSTALL_FAILED_INSUFFICIENT_STORAGE après de nombreuses exécutions. Espérons que ce fut le véritable problème, bien que l'OP suggère que son appareil avait beaucoup d'espace (mais n'a pas dit combien).

    Espérons 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 in /data pour voir où tout votre espace est en cours, s'il y a vraiment un problème d'espace (caché).

    J'avais ajouté une ligne supplémentaire au fichier manifeste de l'application, qui est android:installLocation="preferExternal" . En utilisant cette ligne, cela 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" > 

    Ce qui suit contribue:

    • Ouvrir un shell sur l'appareil

       adb shell 
    • Accédez au répertoire temporaire où l'APK entrant est copié d'abord

       cd /data/local/tmp 
    • Listez les fichiers disponibles et supprimez comme vous le souhaitez

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

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


    EDIT: Ce n'est pas une solution aussi fiable que celle ci-dessus.

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

    Il dit que la fonctionnalité est limitée sur les périphériques non dédiés. Le mien est enraciné afin qu'il soit bon de voir les personnes efficaces dans ces scénarios et si c'était juste une chance que cela 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.

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

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

    • Vous avez travaillé à l'aide d'un périphérique physique (dans mon cas, Samsung Galaxy Ace),
    • Vous avez développé pendant quelques jours,
    • Votre téléphone était connecté tout le temps , le jour et la nuit.
    • Vous avez commencé à subir cette erreur après quelques jours, et cela a continué à empirer.
    • Aucune des autres réponses ne fonctionna 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 laisse reposer TOUT LE JOUR. Ma batterie a perdu un peu. Après cela, je l'ai reconecté et j'ai recommencé à déboguer. Tout a bien fonctionné cette fois! Et je veux dire vraiment vraiment très bien, comme précédemment.

    Est-il possible que cette erreur soit due à certains éléments matériels liés à la batterie ? Il se sent toujours bizarre en pensant de cette façon, mais maintenant je continue de déconnecter mon téléphone de temps en temps (et pour la nuit) et le problème ne revient pas.

    Un problème connexe sur l'émulateur est lorsqu'il n'y a plus de place dans la partition de /data .

    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 une vue d'ensemble du répertoire /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 

    J'ai supprimé les fichiers APK supplémentaires. Il semble que, lors de 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 

    Dans mon cas, l'échec a été causé par l'application com.android.providers.media . J'ai fait face à cela sur l'émulateur Android x86. Qu'est-ce que j'ai fait:

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

    Espace libre trop bas sur /data

     $ adb shell du /data ... 409870 /data/data/com.android.providers.media ... 

    Presque tout a été consommé par une seule application! C'est une application système, alors je considère mieux de ne pas la supprimer. Au lieu de cela, j'ai nettoyé les données de l'application.

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

    Le disque a été effacé et l'application a été installée avec succès.

    Répondre au premier post de ce sujet …

    Symptôme: Certaines applications ne s'installent pas, en disant qu'il n'y a pas d'espace et de réactivité, il y a beaucoup d'espace libre sur le stockage interne et externe! Solution: désactivez l'installation externe par défaut.

    Définir l'installation externe par defaut avec ceci:

     adb shell pm set-install-location 2 

    Impossible d'installer sur de nombreuses applications qui ne peuvent pas être installées à l'extérieur (comme Adblock + ou plus)

    Ensuite, la solution est

     adb shell pm set-install-location 0 

    Ou

     adb shell pm set-install-location 1 0: auto (if one is full - or irrelevant !!! - it select the other) 1: internal 2: external 

    Samsung Galaxy Ace annonce 158 Mo de stockage interne dans ses spécifications, mais les applications et les services de base consomment environ 110 Mo (j'ai utilisé le gestionnaire de tâches sur le périphérique pour l'inspecter). Mon application était de 52 Mo, car elle avait beaucoup d'atouts. Une fois que j'ai supprimé ceux-ci jusqu'à 45 Mo, l'application a réussi à installer sans problème. Le périphérique m'a toujours alerté que le stockage interne était presque plein, et je devais désinstaller certaines applications, même si je n'avais qu'une seule application installée.

    Après avoir installé une version de l'ensemble .apk et puis la désinstaller, mon appareil affiche 99 Mo d'espace libre, donc il peut être possible de déboguer des informations encombrant le périphérique après tout. Voir la réponse de Louis Semprini .

    Dans Eclipse,

    Run -- > Debug Configurations --> Select "target", et sélectionnez une cible d'émulateur préférée pour lancer.

    Ensuite, en dessous de cette "option de ligne de commande de l'émulateur supplémentaire", ajoutez ceci:

    -part-size 1024

    Ensuite, FERMER l'émulateur et cliquer sur l'icône de débogage, qui va lancer l'émulateur préféré que vous avez sélectionné.

    Entrez la description de l'image ici

    J'espère que cela aide…!

    J'ai rencontré ce problème avec mon nouveau Nexus 4 et un APK construit avec Adobe AIR. J'avais déjà Android: installLocation = "preferExternal" dans mon manifeste. J'ai remarqué que j'allais aussi appeler l' adb install avec l'option -s (Installer le paquet sur le stockage de masse partagé, tel que la carte SD). Ce qui semblait être trop élevé.

    En supprimant le drapeau -s de l' adb install réparé le problème.

    J'ai rencontré cette question parce que j'avais cette erreur en utilisant Sideload Wonder Machine pour installer des applications sur mon téléphone actuel. J'ai trouvé que le problème était que j'avais plusieurs fichiers .apk dans le répertoire / loadload. Je pensais que c'était quelque chose qui était pris en charge, mais lorsque j'ai supprimé tout sauf un .apk, l'erreur s'est éteinte.

    Il suffit de désinstaller l'application de l'émulateur soit à partir de la ligne de commande, soit passer aux paramètres et désinstaller l'application. Cela empêchera l'erreur de venir.

    Si vous utilisez un périphérique réel, vous n'avez plus de mémoire interne. Accédez simplement aux paramètres Android -> Applications , et déplacez certaines applications sur la carte SD ou désinstallez certaines applications.

    Si vous utilisez l'émulateur, consultez la réponse de RacZo .

    J'ai rencontré la même erreur lorsque j'ai essayé d'installer par lots environ 50 applications dans le répertoire de la carte SD à l'aide du shell ADB après une mise à jour complète de ROM:

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

    Certains d'entre eux ont été installés, mais beaucoup ont échoué avec l'erreur INSTALL_FAILED_INSUFFICIENT_STORAGE. Toutes les applications échouées avaient de l'espace dans leur nom. J'ai batch renommé et essayé à nouveau. Tout cela a fonctionné cette fois. Je n'ai pas redémarré ni rien. Peut-être que ce n'est pas le problème auquel vous êtes confrontés, mais cela pourrait aider quelqu'un qui cherche avec le même problème que je l'ai fait face.

    Solution émulateur

    Ouvrez votre répertoire .Android . Généralement dans votre répertoire personnel. Ensuite, passez à avd , puis ouvrez le répertoire qui a le nom de l'avd que vous souhaitez modifier.

    Maintenant, modifiez le fichier config.ini et ajoutez la ligne suivante ou modifiez la ligne suivante:

    disk.dataPartition.size=1024

    1024 est la taille que vous souhaitez utiliser dans MB. Enregistrez le fichier, puis démarrez votre émulateur pour wipe user data vérifiées. Votre émulateur devrait maintenant avoir la nouvelle taille.

    La solution est simple.

    Ouvrez AVD Manager. Modifiez votre AVD.

    Dans la section matériel, certaines propriétés sont listées avec "Nouveau …" et "Supprimer" à droite.

    Appuyez sur Nouveau. Sélectionnez la taille de la partition de données. Réglez sur "512 Mo" (le MB est requis). Et tu as fini. Si vous rencontrez toujours des problèmes, augmentez vos partitions de système et de cache également en utilisant la même méthode.

    Tout est documenté ici: http://developer.android.com/guide/developing/devices/managing-avds.html

    Assurez-vous de ne pas connecter votre périphérique Android avec usb en essayant de lancer l'émulateur

    Si vous utilisez votre application sur un émulateur, et si ce problème persiste, vérifiez votre gestionnaire de notification. Si cela vous montre une icône et une notification sur "La mémoire du téléphone est pleine", cela signifie que vous avez déjà installé tant d'applications sur votre émulateur. Désinstallez plusieurs applications que vous ne voulez pas actuellement de «Paramètres >> Gérer l'application >> Sélectionnez Application >> Désinstaller».
    Cet ensemble.
    Maintenant, relancez le programme.

    J'ai eu cette erreur aujourd'hui, lorsque j'utilise mon téléphone pour tester / déboguer avec Eclipse.

    Mon erreur est que j'ai utilisé le caractère spécial norvégien ("æ", "ø", "å") dans le nom de l'application. Lorsque j'ai refacturé le nom de l'application (en utilisant "o" au lieu de "ø"), l'application a été correctement installée.

    Probablement pas votre problème, mais pourrait être remarqué pour les autres personnes ayant la même erreur.

    Après avoir essayé tout le reste dans ce fil, j'ai découvert que mon propre problème était parce que le chemin d'accès au fichier .apk était trop long. Donc, j'ai téléchargé le répertoire dans lequel le .apk était entré et a fait:

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

    au lieu de

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

    Et ça fonctionnait … bien installé.

    Je pensais que cela pourrait aider quelqu'un d'autre.

    J'ai essayé ce qui suit:

    • Redémarré mon appareil
    • Suppression de l'APK précédent
    • Reconstruire mon APK
    • Désinstaller ma copie précédente dans l'appareil
    • Réinstaller

    Vérifiez si cela fonctionne de la même manière que vous.

    Comme ce problème existe encore, je pensais ajouter quelque chose à la réponse de RacZo à des fins de développement. Si vous n'utilisez pas le plugin Eclipse ou pour une raison quelconque, vous n'avez pas la source, mais simplement le .apk, vous pouvez augmenter la taille de la partition à partir de la ligne de commande en utilisant la même option lorsque vous lancez l'émulateur:

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

    Pour autant que je sache, cette option n'est pas documentée chez developer.android.com, alors j'ai pensé que je l'afficherais ici afin que les gens puissent trouver cette solution.

    Dans mon cas, il a été corrigé en augmentant la mémoire étendue de l'éclipse, en changeant la valeur de -Xmx768m dans eclipse.ini

    J'ai fini par désinstaller l'application depuis l'appareil, puis je l'ai réinstallé dans Eclipse. C'est un problème que j'ai tout le temps sur mon appareil à partir d'une utilisation régulière, mais aujourd'hui j'ai reçu ce message du développement.

    Solution de contournement:

    Compile comme 2.1 sans android:installLocation="preferExternal" .

    D'accord?

    Compilez comme 2.2, y compris android:installLocation="preferExternal" .

    Cela installera toujours sur une version SDK inférieure à 8 (la balise XML est ignorée).

    J'ai aussi fait face au même problème, et j'ai fait une "Réinitialisation des données d'usine", et cela a bien fonctionné après cela.

    Je n'avais pas d'accès root sur mon téléphone et je ne suis pas préparé pour que mon application soit installée sur la carte SD. 15 Mo d'espace est disponible sur /data/ et mon application est inférieure à 2 Mo.

    Pendant un moment, je suis passé; Le nettoyage du projet Eclipse et le redémarrage du téléphone, mais finalement cela a cessé de fonctionner (probablement après une mise à jour).

    Le nettoyage de mon cache d'application a résolu le problème pour moi et ne nécessite pas de redémarrage du téléphone ni de désinstallation de l'application.

    Il existe des applications sur le marché que vous pouvez utiliser pour effacer le cache de plusieurs applications à la fois. Recherchez "propre".

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.