536 votos

Solución al error INSTALL_FAILED_INSUFFICIENT_STORAGE en Android

El INSTALL_FAILED_INSUFFICIENT_STORAGE El error es la perdición de todos los desarrolladores de Android. Ocurre independientemente del tamaño de la aplicación, o de la cantidad de almacenamiento disponible. Reiniciar el dispositivo de destino soluciona el problema brevemente, pero pronto vuelve a aparecer. Hay cientos (si no miles) de mensajes de personas que preguntan por qué se produce el problema, pero la gente de Google guarda un frustrante silencio sobre el tema.

Hay una solución sencilla. Si su dispositivo de prueba está ejecutando Android 2.2 o posterior, entonces añada el android:installLocation al archivo de manifiesto de su aplicación, con el valor "preferExternal" . Esto obligará a instalar la aplicación en el almacenamiento externo del dispositivo, como la tarjeta SD del teléfono.

Por ejemplo:

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

Esto es más una tirita que una solución, y puede no ser ideal si quieres que tu aplicación terminada se instale en la memoria interna del dispositivo. Pero al menos hará que el proceso de desarrollo sea mucho menos frustrante.

187voto

gabcas Puntos 131

Esto es sólo una solución temporal y no un arreglo real.

Después de que me pasara esto y de no estar contento con las respuestas actuales me puse a trabajar tratando de resolverlo desde la fuente AOSP. He encontrado un REAL solución.

Explicación

En primer lugar, un poco de información (simplificada) sobre cómo Android instalaciones y actualizaciones

La primera vez que se instala una aplicación:

  1. El APK se guarda como

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

Cuándo se va a actualizar la aplicación:

  1. El archivo APK actualizado se guarda como:

    /data/app/<full.package.name>-2.apk (2.apk)
  2. La primera versión (1.apk) se borra.

En nuestra(s) próxima(s) actualización(es):

  1. El nuevo APK se guarda como (1.apk) y el (2.apk) se borra (Repite para siempre).

El problema que estamos teniendo la mayoría ocurre cuando se actualiza la aplicación, pero falla el borrado del APK antiguo. Lo que en sí aún no hace fallar la actualización, pero sí hace que haya dos archivos APK en /data/app .

La próxima vez que intente actualizar la aplicación el sistema no podrá mover su archivo temporal porque ni (1.apk) ni (2.apk) están vacíos. Como File#renameTo(File) no lanza una excepción sino que devuelve un booleano PackageManager no tiene forma de decir por qué devuelve INSTALL_FAILED_INSUFFICIENT_STORAGE aunque el fallo no tenga nada que ver con la cantidad de espacio libre.

Solución

Corre:

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

O

Desinstalar la aplicación

Utilice su método favorito para eliminar AMBOS :

/data/app/<nombre.del.paquete>-1.apk

/data/app/<nombre.del.paquete>-2.apk

Asegúrese de que nada más bloquea las futuras instalaciones de manera similar. En mi caso tenía un /data/app-lib/<full.package.name>-1 ¡directorio que se queda por ahí! En este caso, una instalación en el Tarjeta SD funcionó, y un posterior paso a la memoria interna, también. (Creación de /data/app-lib/<full.package.name> sin el -1 final).

Por qué funcionaron otras "soluciones"

  • El código para la instalación en el almacenamiento externo es significativamente diferente que no tiene los mismos problemas

  • La desinstalación de la aplicación sólo elimina una versión del archivo APK en /data/app . Por eso puedes reinstalarlo una vez, pero no actualizarlo.

  • La cantidad de espacio libre en un emulador no es realmente relevante cuando se produce este fallo

110voto

RacZo Puntos 5731

Necesitas aumentar la capacidad de memoria del emulador de Android. Hay dos maneras de hacerlo:

  1. Haga clic con el botón derecho del ratón en root de su proyecto Android, vaya a "Ejecutar como" y luego vaya a "Ejecutar configuraciones...". Localiza el nodo "Aplicación Android" en el árbol de la izquierda, y luego selecciona tu proyecto y ve a la pestaña "Target" en la parte derecha de la ventana busca el campo "Additional Emulator Command Line Options" (a veces necesitarás hacer la ventana más grande) y finalmente pega "-partition-size 1024" allí. Haz clic en Aplicar y luego en Ejecutar para utilizar tu emulador.

  2. Ir a Eclipse's Preferencias, y luego seleccione "Lanzamiento" Añada "-tamaño de partición 1024" en el campo "Opción de emulador por defecto". Haz clic en "Aplicar" y utiliza tu emulador como siempre.

30voto

Louis Semprini Puntos 581

Gracias por publicar esta pregunta. Tengo algunas ideas adicionales que pueden ayudar a algunos desarrolladores.

Estoy depurando mi aplicación en un dispositivo (no en el emulador). El dispositivo tiene 21 MB libres en /data (como revela "df" al hacer "adb Shell") y mi aplicación sólo ocupa 5 MB. Sin embargo, descubrí que si borraba otras aplicaciones en el dispositivo (sin reiniciar el teléfono o reiniciar adbd), INSTALL_FAILED_INSUFFICIENT_STORAGE desaparecía por un tiempo y luego volvía.

Así que parece que la depuración de mi aplicación de 5 MB requiere más de 20 MB de espacio en /data y además algo se filtraba cada vez que depuraba mi aplicación.

Así que hice "adb Shell" y listé TODO el /data directorio con

cd /data
ls -a -l -R

Y miré la salida de 5000 líneas para ver dónde iba todo el espacio.

Descubrí grandes cantidades de espacio desperdiciado en mi dispositivo en el /data/klog directorio en forma de viejos archivos de registro de sesiones de depuración de hace meses.

Estos no eran mis archivos de registro: fueron creados por alguna parte de la infraestructura de Android.

Los he eliminado y al instante he ahorrado 58 MB que no estaban atribuidos en la aplicación de Ajustes a ninguna aplicación en particular. Tengo un dispositivo pequeño, así que 58 MB son muy significativos (alrededor del 40%).

Hasta ahora, no he vuelto a tener INSTALL_FAILED_INSUFFICIENT_STORAGE después de muchas ejecuciones. Esperemos que ese fuera el verdadero problema, aunque el OP sugiere que su dispositivo tenía mucho espacio (pero no dijo cuánto).

Con suerte, algunos de vosotros también podréis escapar de INSTALL_FAILED_INSUFFICIENT_STORAGE borrando periódicamente /data/klog/* .

O, al menos, puedes hacer el ls -a -l -R en /data para ver a dónde va todo su espacio, si es que realmente hay algún problema de espacio (oculto).

16voto

nasirkhan Puntos 597

He añadido una línea adicional al archivo de manifiesto de la aplicación, que es android:installLocation="preferExternal" . al usar esta línea obliga a instalar la aplicación en el almacenamiento externo. vea el ejemplo siguiente,

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

11voto

Ralph Yozzo Puntos 375

Un problema relacionado en el emulador es cuando no queda espacio en el /data partición.

Por ejemplo,

% 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

Esta es una muestra de la vista del /data/app directorio:

% 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

He quitado el extra APK archivos. Parece que en cada instalación se obtiene un nuevo archivo APK. Sólo hay que eliminar los archivos APK adicionales.

Por ejemplo,

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X