Solución al error INSTALL_FAILED_INSUFFICIENT_STORAGE en Android

El error INSTALL_FAILED_INSUFFICIENT_STORAGE es la perdición de la vida de todos los desarrolladores de Android. Ocurre independientemente del tamaño de la aplicación, o cuánto almacenamiento está disponible. Reiniciar el dispositivo de destino soluciona el problema brevemente, pero pronto vuelve. Hay cientos (si no miles) de mensajes de mensajes de la gente preguntando por qué ocurre el problema, pero la gente de Google es frustrante silencio sobre el tema.

Hay una solución sencilla. Si su dispositivo de prueba ejecuta Android 2.2 o posterior, agregue el atributo android: installLocation al archivo de manifiesto de su aplicación, con el valor " preferExternal ". Esto obligará a que la aplicación se instale en el almacenamiento externo del dispositivo, como la tarjeta SD de un 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 ayuda de banda que una corrección, y puede que no sea ideal si desea que su aplicación final se instale en la memoria interna del dispositivo. Pero al menos hará que el proceso de desarrollo sea mucho menos frustrante.

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

Después de que esto suceda a mí y no estar satisfecho con las respuestas actuales fui a trabajar tratando de averiguarlo a partir de la fuente AOSP. He encontrado una solución REAL .

Explicación

En primer lugar, un poco de fondo (simplificado) sobre cómo Android instala y actualiza

La primera vez que se instala una aplicación:

  1. El archivo APK se guarda como

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

Cuando se debe actualizar la aplicación:

  1. El archivo APK actualizado se guarda como:

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

  2. Se elimina la primera versión (1.apk).

En nuestra (s) siguiente (s) actualización (es):

  1. El nuevo APK se guarda como (1.apk) y se elimina (2.apk) (Repeat forever).

El problema que la mayoría de nosotros está teniendo ocurre cuando la aplicación se actualiza, pero la eliminación de la antigua APK falla. Que por sí mismo aún no causa la actualización a fallar, pero sí causa 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. Dado que File # renameTo (File) no arroja una excepción pero en su lugar devuelve un PackageManager booleano, no tiene ninguna manera de decir por qué devuelve INSTALL_FAILED_INSUFFICIENT_STORAGE aunque el error no tiene nada que ver con la cantidad de espacio libre.

Solución

Correr:

 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 BOTH :

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

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

Asegúrese de que nada más bloquea futuras instalaciones de manera similar. En mi caso tuve un directorio /data/app-lib/<full.package.name>-1 rezagado alrededor! En este caso, una instalación a la tarjeta SD funcionó, y un movimiento posterior a la memoria interna, también. (Creación /data/app-lib/<full.package.name> sin la terminación -1 .)

¿Por qué otras "soluciones" funcionaron

  • El código para instalar en un almacenamiento externo es significativamente diferente y no tiene los mismos problemas

  • La desinstalación de la aplicación solo elimina una versión del archivo APK en /data/app . Es por eso que puede reinstalarlo una vez, pero no actualizarlo.

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

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

  1. Haga clic con el botón derecho en la raíz de su proyecto de Android, vaya a "Ejecutar como" y luego vaya a "Ejecutar configuraciones …". Localice el nodo "Aplicación de Android" en el árbol de la izquierda y luego seleccione su proyecto y vaya a la pestaña "Destino" en el lado derecho de la ventana, busque el campo "Opciones de línea de comandos de emulador adicional" Ll necesidad de hacer la ventana más grande) y finalmente pegar "-partition-tamaño 1024" allí. Haga clic en Aplicar y luego en Ejecutar para usar su emulador.

  2. Vaya a Preferencias de Eclipse y luego seleccione "Iniciar" Añadir "-partition-size 1024" en el campo "Opción de emulador predeterminado". Haga clic en "Aplicar" y utilice su emulador como de costumbre.

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 lo revela "df" al hacer "shell de adb") y mi aplicación es de sólo 5 MB. Sin embargo, encontré que si eliminé otras aplicaciones en el dispositivo (sin reiniciar el teléfono o reiniciar adbd), INSTALL_FAILED_INSUFFICIENT_STORAGE desaparecería por un tiempo y luego volvería.

Por lo tanto, parece que la depuración de mi aplicación de 5 MB requiere más como 20 MB de espacio en /data , y además algo estaba goteando cada vez que depuré mi aplicación.

Así que hice "adb shell" y enlistó el directorio ENTIRE /data con

 cd /data ls -a -l -R 

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

Descubrí grandes cantidades de espacio perdido en mi dispositivo en el directorio /data/klog en forma de archivos de registro antiguos de sesiones de depuración de meses de antigüedad.

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

Los suprimí e inmediatamente guardé 58 MB que no fue atribuido en la aplicación Ajustes a ninguna aplicación en particular. Tengo un pequeño dispositivo por lo que 58 MB es muy significativo (alrededor del 40%).

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

Esperemos que algunos de ustedes también puedan escapar de INSTALL_FAILED_INSUFFICIENT_STORAGE eliminando periódicamente /data/klog/* .

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

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

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

Las siguientes ayudas:

  • Abrir un shell en el dispositivo

     adb shell 
  • Navegue hasta el directorio temporal donde se copiará el APK entrante

     cd /data/local/tmp 
  • Liste los archivos disponibles y elimínelos como desee

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

Esto ha sido confiable para mí hasta ahora en un dispositivo real.


EDIT: Esto resultó ser una solución no tan confiable como la anterior.

He intentado una serie de soluciones. Nada realmente ayudó. Finalmente encontré una aplicación llamada SD Maid . Eso ayudó.

Dice que la funcionalidad está limitada en los dispositivos no conectados. Mina está arraigada por lo que sería bueno ver oír a la gente eficaz es en esos escenarios y si fue sólo una casualidad que funcionó para mí (es un problema impredecible de todos modos).

NOTA: No tengo nada que ver con la aplicación. Lo encontré con una búsqueda.

Lo he resuelto incluyendo android:installLocation="auto" dentro de la etiqueta <manifest> en el archivo AndroidManifest.xml.

Me siento un poco extraño escribiendo esto, pero no puedo estar 100% seguro de que no es cierto en algunos casos (funcionó para mí). Si tiene los siguientes síntomas:

  • Has estado trabajando con un dispositivo físico (en mi caso, Samsung Galaxy Ace),
  • Te has estado desarrollando durante un par de días seguidos,
  • El teléfono estaba conectado todo el tiempo , día y noche.
  • Empezó a recibir este error después de un par de días, y no dejó de empeorar.
  • Ninguna de las otras respuestas funcionó para usted.
  • Estás tan resignado como yo …

Luego, prueba esto:

  • Desconecte el teléfono cuando no esté trabajando.

Desconecté mi teléfono y lo dejé descansar durante TODO EL DÍA. Mi batería se desgastó un poco. Después de esto, lo reconecté y comencé a depurar de nuevo. Todo funcionó bien esta vez! Y me refiero realmente muy bien, al igual que antes.

¿Es posible que este error se deba a algunas cosas de hardware relacionadas con la batería ? Todavía se siente raro pensar de esta manera, pero ahora sigo desconectando mi teléfono de vez en cuando (y por la noche) y el problema no regresó.

Un problema relacionado en el emulador es cuando no hay ningún espacio que queda en la partición /data .

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 

A continuación, se muestra una vista de ejemplo del directorio /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 

Quité los archivos adicionales de APK . Parece que a cada instalación se obtiene un nuevo archivo APK. Sólo tienes que quitar los archivos adicionales de APK.

Por ejemplo,

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

En mi caso el fallo fue causado por la aplicación com.android.providers.media . Me enfrenté a esto en el emulador x86 android. ¿Qué hice:

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

Espacio libre demasiado bajo en /data

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

Casi todo fue consumido por una sola aplicación! Es una aplicación de sistema por lo que considero mejor no eliminarla. En cambio, limpié los datos de la aplicación.

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

El disco se ha eliminado y la aplicación se ha instalado correctamente.

Respondiendo al primer post de este tema …

Síntoma: Alguna aplicación no se instala, diciendo que no hay espacio y en realidad hay mucho espacio libre tanto en almacenamiento interno como externo !!! Solución: deshabilite la instalación externa de forma predeterminada.

Configurar la instalación externa por defaut con esto:

 adb shell pm set-install-location 2 

Hace imposible la instalación en muchas aplicaciones que no pueden instalarse externamente (como adblock + o algo así)

Entonces la solución es

 adb shell pm set-install-location 0 

O

 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 anuncia 158 MB de almacenamiento interno en sus especificaciones, pero las principales aplicaciones y servicios consumen alrededor de 110 MB de eso (utilicé el administrador de tareas en el dispositivo para inspeccionar esto). Mi aplicación tenía 52 MB, porque tenía muchos activos. Una vez que he eliminado algunos de los que hasta 45 MB, la aplicación se las arregló para instalar sin ningún problema. El dispositivo todavía me estaba alertando de que el almacenamiento interno estaba casi lleno, y debo desinstalar algunas aplicaciones, aunque sólo tenía una aplicación instalada.

Después de instalar una versión de lanzamiento del paquete .apk y luego desinstalarlo, mi dispositivo muestra 99 MB de espacio libre, por lo que podría estar depurando la información que estorba el dispositivo después de todo. Ver la respuesta de Louis Semprini .

En Eclipse,

Run -- > Debug Configurations --> Select "target", y seleccione un destino de emulador preferido para iniciar.

A continuación, debajo de "opciones adicionales de la línea de comandos del emulador", agregue esto:

-partition-size 1024

A continuación, CIERRE el emulador y haga clic en el icono de depuración, que iniciará el emulador preferido que haya seleccionado.

Introduzca aquí la descripción de la imagen

Espero eso ayude…!

Me encontré con este problema con mi nuevo Nexus 4 y un APK construido con Adobe AIR. Ya tenía android: installLocation = "preferExternal" en mi manifiesto. Me di cuenta que también estaba llamando adb install con la opción -s (instalar el paquete en el almacenamiento masivo compartido, como sdcard.) Que parecía exceso.

Eliminar el indicador -s de la adb install arregló el problema para mí.

Me encontré con esta pregunta porque estaba recibiendo este error con el Sideload Wonder Machine para instalar aplicaciones a mi teléfono real. Encontré el problema era que tenía varios archivos .apk en el directorio / payload. Pensé que esto era algo que era apoyado, pero cuando quité todos sino uno .apk, el error se fue.

Simplemente desinstale la aplicación del emulador ya sea desde la línea de comandos o vaya a la configuración y desinstale la aplicación. Esto evitará que se produzca el error.

Si está utilizando un dispositivo real, simplemente se queda sin memoria interna. Solo tienes que ir a la configuración de Android -> Aplicaciones y mover algunas aplicaciones a la tarjeta SD o desinstalar algunas aplicaciones.

Si está usando el emulador, vea la respuesta de RacZo .

Me encontré con el mismo error cuando intenté instalar por lotes alrededor de 50 aplicaciones en el directorio de la tarjeta SD con el shell ADB después de una actualización completa de la ROM:

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

Algunos de ellos se instalaron, pero muchos fallaron con el error INSTALL_FAILED_INSUFFICIENT_STORAGE. Todas las aplicaciones fallidas tenían espacio en su nombre. I batch los cambió de nombre y lo intenté de nuevo. Todo funcionó esta vez. No hice reiniciar o nada. Puede ser que este no es el problema que ustedes están enfrentando, pero esto podría ayudar a alguien buscando con el mismo problema que me enfrenté.

Solución de emulador

Abra el directorio .Android . Generalmente en su directorio personal. Luego vaya a avd y luego abra el directorio que tiene el nombre del avd que desea cambiar.

Ahora edite el archivo config.ini y agregue la línea siguiente o modifique la línea siguiente:

disk.dataPartition.size=1024

Donde 1024 es el tamaño que le gustaría usar en MB. Guarde el archivo y, a continuación, inicie su emulador con wipe user data marcados. Su emulador debería tener ahora el nuevo tamaño.

La solución es simple.

Abre el Administrador de AVD. Edite su AVD.

Abajo en la sección de hardware, hay algunas propiedades listadas con "Nuevo …" y "Eliminar" a la derecha de la misma.

Presione Nuevo. Seleccione Tamaño de partición de datos. Establecer en "512MB" (el MB es necesario). Y tu estas listo. Si sigue teniendo problemas, aumente el sistema y las particiones de caché también utilizando el mismo método.

Todo está documentado aquí: http://developer.android.com/guide/developing/devices/managing-avds.html

Asegúrese de no conectar su dispositivo android con usb mientras intenta ejecutar el emulador

Si está ejecutando la aplicación en un emulador y si este problema persiste, consulte su administrador de notificaciones. Si muestra un icono y una notificación sobre "La memoria del teléfono está llena", significa que ya ha instalado tantas aplicaciones en su emulador. Desinstale varias aplicaciones que actualmente no desea que aparezcan en "Configuración"> "Administrar aplicación"> "Seleccione Aplicación>" Desinstalar ".
Ese conjunto.
Ahora vuelva a ejecutar el programa.

Recibí este error hoy, al usar mi teléfono para probar / depurar con Eclipse.

Mi error fue que usé el carácter especial noruego ("æ", "ø", "å") en el nombre de la aplicación. Cuando replanteé el nombre de la aplicación (usando "o" en lugar de "ø") la aplicación se instaló correctamente.

Probablemente no es su problema, pero podría ser la nota para otras personas que reciben el mismo error.

Después de probar todo lo demás en este hilo, descubrí que mi propio problema era porque la ruta al archivo .apk era demasiado larga. Así que cd'ed al directorio donde estaba el .apk y lo hizo:

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

en lugar de

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

Y funcionó … instalado muy bien.

Sólo pensé que esto podría ayudar a alguien más.

He intentado lo siguiente:

  • Reinició mi dispositivo
  • Eliminado anterior APK
  • Reconstruir mi APK
  • Desinstalar mi copia anterior en el dispositivo
  • Reinstalar

Compruebe si funciona igual con usted.

Como este problema aún existe, pensé en añadir algo a la respuesta de RacZo con fines de desarrollo. Si no está utilizando el complemento de Eclipse o por cualquier motivo, no tiene el origen, sino sólo el .apk, puede aumentar el tamaño de partición desde la línea de comandos utilizando la misma opción al iniciar el emulador:

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

Por lo que sé, esta opción no está documentada en developer.android.com, por lo que pensé publicarlo aquí para que la gente pueda encontrar esta solución.

En mi caso se corrigió aumentando la memoria extendida de eclipse, cambiando el valor de -Xmx768m en eclipse.ini

Terminé desinstalando la aplicación del dispositivo y luego reinstalándola en Eclipse. Este es un problema que consigo todo el tiempo en mi dispositivo de uso regular, pero hoy tengo ese mensaje de desarrollo.

Solución:

Compila como 2.1 sin android:installLocation="preferExternal" .

¿OKAY?

Compila como 2.2 incluyendo android:installLocation="preferExternal" .

Esto todavía se instalará en la versión de SDK menos de 8 (la etiqueta XML se ignora).

Yo también me enfrenté al mismo problema, y ​​hice un "Factory Data Reset", y funcionó bien después de eso.

No tenía acceso root en mi teléfono y no estoy preparado para que mi aplicación se instale en la tarjeta SD. 15 MB de espacio disponible en /data/ y mi aplicación tiene menos de 2 MB.

Durante un tiempo pasé; Limpiar el proyecto Eclipse y reiniciar el teléfono, pero finalmente dejó de funcionar (probablemente después de una actualización).

La limpieza de mi caché de aplicaciones ha solucionado el problema para mí y no requiere un reinicio del teléfono o la desinstalación de la aplicación.

Hay aplicaciones en el mercado que puede utilizar para borrar el caché de múltiples aplicaciones a la vez. Búsqueda de "limpio".

  • Android: quitar una imagen de la tarjeta sd
  • Guardar archivo en android, por lo que el usuario no puede leer
  • No se puede crear Dir de archivos externos en Android. WRITE_EXTERNAL_STORAGE está presente
  • ¿Cómo calcula Android el caché y el tamaño de los datos?
  • Acceso al almacenamiento en el rincón
  • Tratando de copiar SQLite DB desde datos a tarjeta SD
  • Cómo guardar una imagen en una galería de almacenamiento externa en android
  • ¿Qué es Context.getExternalMediaDir ()?
  • Compruebe si la tarjeta SD está presente, boolean siempre es cierto
  • Error al listar archivos con Android Storage Access framework en Lollipop
  • ¿Cómo quitar el archivo que se guarda en la tarjeta SD del emulador?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.