sdcard how directly data card apps app android installation android-sdcard

how - Solución al error INSTALL_FAILED_INSUFFICIENT_STORAGE en Android



http sdcard (30)

El error de INSTALL_FAILED_INSUFFICIENT_STORAGE es la pesadilla de la vida de todos los desarrolladores de Android. Sucede independientemente del tamaño de la aplicación o de la cantidad de almacenamiento disponible. Al reiniciar el dispositivo de destino se soluciona el problema brevemente, pero pronto vuelve. Hay cientos (si no miles) de mensajes en el tablero de mensajes de personas que preguntan por qué ocurre el problema, pero la gente de Google se muestra frustrantemente silenciosa al respecto.

Hay una solución simple. Si su dispositivo de prueba está ejecutando 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 curita que una solución, y puede que no sea lo 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.


Asegúrate de no conectar tu dispositivo Android con usb mientras intentas ejecutar el emulador


Como este problema aún existe, pensé que agregaría algo a la respuesta de RacZo para propósitos de desarrollo. Si no está utilizando el complemento Eclipse''s o por alguna razón no tiene la fuente, pero solo el .apk, puede aumentar el tamaño de la partición desde la línea de comandos usando la misma opción cuando inicie el emulador:

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

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


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 me dirigí al directorio donde estaba el .apk e hice:

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.

Solo pensé que esto podría ayudar a alguien más.


En eclipse,

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

Luego, debajo de "las opciones de línea de comandos adicionales del emulador", agregue esto:

tamaño de la partición 1024

Luego CIERRE el emulador y haga clic en el ícono de depuración, que iniciará el emulador preferido que seleccionó.

Espero eso ayude...!


En mi caso, el error fue causado por la aplicación com.android.providers.media . Me enfrenté a esto en el emulador de Android x86. Que 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 la aplicación del sistema por lo que considero mejor no borrarla. En su lugar, 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 borró y la aplicación se instaló correctamente.


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


Encontré el mismo error cuando intenté instalar por lotes cerca de 50 aplicaciones en el directorio de la tarjeta SD usando 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. Los renombré por lotes e intenté de nuevo Todo funcionó esta vez. No hice reinicio ni nada. Puede que este no sea el problema al que se enfrentan, pero esto podría ayudar a alguien que busca el mismo problema que yo.


Esto es solo una solución temporal y no una solución real.

Después de que me sucediera esto y no estar satisfecho con las respuestas actuales, me puse a trabajar tratando de descifrarlo de la fuente de AOSP. He encontrado una solución REAL .

Explicación

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

La primera vez que se instala una aplicación:

  1. El archivo APK se guarda como

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

Cuando la aplicación se va a actualizar:

  1. El archivo APK actualizado se guarda como:

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

  2. La primera versión (1.apk) se borra.

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

  1. El nuevo APK se guarda como (1.apk) y (2.apk) se elimina (Repetir para siempre).

El problema que tenemos la mayoría de nosotros ocurre cuando se actualiza la aplicación, pero la eliminación del APK anterior falla. Lo que en sí aún no hace que la actualización falle, 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 el archivo # renameTo (Archivo) no lanza una excepción, sino que devuelve un PackageManager booleano, no tiene forma de decir por qué devuelve INSTALL_FAILED_INSUFFICIENT_STORAGE, aunque el error no tuvo 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 AMBOS :

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

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

Asegúrese de que nada más bloquee las futuras instalaciones de una manera similar. En mi caso, tenía un directorio /data/app-lib/<full.package.name>-1 persistente alrededor! En este caso, funcionó una instalación en la tarjeta SD y un posterior traslado a la memoria interna. (Creando /data/app-lib/<full.package.name> sin el final -1 ).

¿Por qué otras "soluciones" funcionaron?

  • El código para instalar en el almacenamiento externo es significativamente diferente, ya que 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 ocurre este error


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 (según lo revelado por "df" al hacer "adb shell") y mi aplicación solo tiene 5 MB. Sin embargo, encontré que si borraba otras aplicaciones en el dispositivo (sin reiniciar el teléfono ni reiniciar el 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 de 20 MB de espacio en /data , y además, cada vez que depuraba mi aplicación se estaba filtrando algo.

Así que hice "adb shell" y listé /data 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 desperdiciado 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 borré y guardé instantáneamente 58 MB que no se atribuyeron en la aplicación Configuración a ninguna aplicación en particular. Tengo un dispositivo pequeño, por lo que 58 MB es muy significativo (alrededor del 40%).

Hasta ahora, no he conseguido INSTALL_FAILED_INSUFFICIENT_STORAGE de nuevo después de muchas ejecuciones. Esperemos que ese 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, al menos, puede hacer la 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).


Había 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 a continuación,

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


Intenté lo siguiente:

  • Reinicie mi dispositivo
  • Eliminado APK anterior
  • Reconstruir mi APK
  • Desinstalar mi copia anterior en el dispositivo.
  • Reinstalar

Comprueba si funciona igual contigo.


Las siguientes ayudas:

  • Abre un shell al dispositivo.

    adb shell

  • Navegue al directorio temporal donde se copia por primera vez el APK entrante

    cd /data/local/tmp

  • Listar los archivos disponibles y borrar según lo deseado

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

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

EDITAR: Esta solución no resultó tan confiable como la anterior.

Probé varias soluciones. Nada realmente ayudó. Finalmente encontré una aplicación llamada SD Maid . Eso ayudó.

Dice que la funcionalidad está limitada en dispositivos sin rootear. El mío está arraigado, por lo que sería bueno ver cómo las personas escuchan de manera efectiva lo es en esos escenarios y, si fue una casualidad, funcionó para mí (es un problema impredecible de todos modos).

NOTA: No tengo nada que ver con la aplicación. Acabo de encontrarlo con una búsqueda.


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


Me encontré con esta pregunta porque estaba recibiendo este error al usar Sideload Wonder Machine para instalar aplicaciones en mi teléfono real. Encontré que el problema era que tenía varios archivos .apk en el directorio / payload. Pensé que esto era algo que era compatible, pero cuando eliminé todos menos uno .apk, el error desapareció.


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

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


Me siento un poco raro al escribir esto, pero no puedo estar 100% seguro de que no sea cierto en algunos casos (funcionó para mí). Si tuvo los siguientes síntomas:

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

Entonces, intente esto:

  • ¡Desconecta tu teléfono cuando no estés trabajando!

Desenchufé mi teléfono y lo dejé reposar por TODO EL DÍA. Mi batería se gastó un poco. Después de esto, lo volví a conectar 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 algún problema de hardware relacionado 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 volvió.


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

  1. Haga clic 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. Mire hacia abajo para ver el campo "Opciones de línea de comando del emulador adicional". Necesitaré hacer la ventana más grande) y finalmente pegar "-partition-size 1024" allí. Haga clic en Aplicar y luego en Ejecutar para usar su emulador.

  2. Vaya a Eclipse''s Preferencias Eclipse''s y luego seleccione "Iniciar". Agregue "-partition-size 1024" en el campo "Opción de emulador predeterminada". Haga clic en "Aplicar" y utilice su emulador como de costumbre.


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

Por un tiempo me las arreglé; limpiando el proyecto de Eclipse''s y reiniciando el teléfono, pero finalmente eso dejó de funcionar (probablemente después de una actualización).

La limpieza de la memoria caché de la aplicación me solucionó el problema y no requiere reiniciar el teléfono ni desinstalar la aplicación.

Existen aplicaciones en el mercado que puede utilizar para borrar la caché de varias aplicaciones a la vez. Buscar "limpio".


Recibí este error hoy, cuando uso 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 reformulé el nombre de la aplicación (usando "o" en lugar de "ø"), la aplicación se instaló correctamente.

Probablemente no sea su problema, pero podría ser importante para otras personas que cometen el mismo error.


Respondiendo a la primera publicación de este tema ...

Síntoma: algunas aplicaciones no se instalan, ya que no hay espacio y, en realidad, ¡¡hay mucho espacio libre tanto en el almacenamiento interno como en el externo !! Solución: deshabilita la instalación externa por defecto.

Configurando la instalación externa por defecto con esto:

adb shell pm set-install-location 2

Hace que la instalación sea imposible en muchas aplicaciones que no pueden instalarse externamente (como adblock + o 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


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


Si está utilizando un dispositivo real, simplemente se ha quedado sin memoria interna. Simplemente vaya a la configuración de Android -> Aplicaciones , y mueva algunas aplicaciones a la tarjeta SD o desinstale algunas aplicaciones.

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


Simplemente desinstale la aplicación desde el emulador desde la línea de comandos o vaya a la configuración y desinstale la aplicación. Esto detendrá el error.


Solución:

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

¿OKAY?

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

Esto aún se instalará en la versión de SDK inferior a 8 (la etiqueta XML se ignora).


Terminé de desinstalar la aplicación del dispositivo y luego la reinstalé de nuevo en Eclipse. Este es un problema que recibo todo el tiempo en mi dispositivo debido al uso regular, pero hoy recibí ese mensaje del desarrollo.


Un problema relacionado con el emulador es cuando no queda espacio 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

Aquí hay una vista de muestra 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

He eliminado los archivos APK extra. Parece que en cada instalación obtienes un nuevo archivo APK. Simplemente quite los archivos APK adicionales.

Por ejemplo,

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


Yo también enfrenté el mismo problema, e hice un "restablecimiento de datos de fábrica", y funcionó bien después de eso.


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 su derecha.

Presione Nuevo. Seleccione el tamaño de la partición de datos. Establezca en "512 MB" (se requiere el MB). Y tu estas listo. Si todavía tiene problemas, aumente también su sistema y las particiones de caché utilizando el mismo método.

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


Samsung Galaxy Ace anuncia 158 MB de almacenamiento interno en sus especificaciones, pero las aplicaciones y servicios principales consumen aproximadamente 110 MB de eso (utilicé el administrador de tareas en el dispositivo para inspeccionar esto). Mi aplicación era de 52 MB, porque tenía muchos activos. Una vez que eliminé algunos de esos hasta 45 MB, la aplicación logró instalarse sin problemas. El dispositivo todavía me estaba alertando de que el almacenamiento interno estaba casi lleno, y debería desinstalar algunas aplicaciones, aunque solo tenía una aplicación instalada.

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


Solución emuladora

Abra su directorio .Android . Por lo general en su directorio personal. Luego, vaya a avd y luego abra el directorio que tiene el nombre de avd que desea cambiar.

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

disk.dataPartition.size=1024

Donde 1024 es el tamaño que le gustaría usar en MB. Guarde el archivo y luego inicie su emulador con la wipe user data marcados. Tu emulador ahora debería tener el nuevo tamaño.