151 votos

¿Dónde almacenan datos las aplicaciones de Android?

¿Podrías enumerar todos los posibles directorios donde las aplicaciones de Android pueden almacenar datos? ¿Puedes también proporcionar una descripción del tipo de datos almacenados en cada directorio?

138voto

Izzy Puntos 45544

Todas las aplicaciones (con root o sin él) tienen un directorio de datos predeterminado, que es /data/data/. Por defecto, las bases de datos de las aplicaciones, configuraciones y todos los demás datos van aquí. Este directorio es "privado" para la aplicación, lo que significa que ninguna otra aplicación e incluso el usuario pueden acceder a los datos en él (sin permisos de root).

Si una aplicación espera almacenar grandes cantidades de datos, o por otras razones desea "ser amigable con el almacenamiento interno", hay un directorio correspondiente en la tarjeta SDCard (Android/data/).

Además de eso, todas las aplicaciones pueden almacenar datos en cualquier lugar en la tarjeta SDCard, ya que no hay restricciones, y muchas aplicaciones lo hacen. Pueden usar nombres de directorio libremente (y lo hacen nuevamente), lo que a menudo dificulta decidir para qué está destinado todo ese "desorden" en la tarjeta, y qué parte de él se puede eliminar.

Aunque, como Tom señaló, las aplicaciones con root podrían almacenar sus datos casi en cualquier lugar de su dispositivo, suelen seguir las mismas reglas que las demás aplicaciones.

Puedes encontrar una explicación general de la jerarquía de directorios de Android en mi respuesta aquí. Para tu pregunta específica, podría agregar algunos detalles sobre el /data/data/ (y su parte en la SD):

  • databases/: aquí van las bases de datos de la aplicación
  • lib/: bibliotecas y ayudantes para la aplicación
  • files/: otros archivos relacionados
  • shared_prefs/: preferencias y configuraciones
  • cache/: bueno, cachés

Puede haber varios directorios más en este lugar, o menos, todo depende de la aplicación. En su propio "directorio root" (y eso es básicamente lo que es, hablando en términos de Linux), pueden colocar archivos donde quieran. Por lo general, estos archivos y directorios solo son accesibles por la aplicación misma (y por root, por supuesto), a diferencia de los almacenados en la SDCard, que son accesibles por todas las aplicaciones.

0 votos

Los comentarios no son para discusiones extendidas; esta conversación ha sido trasladada a un chat.

2 votos

Y luego llegó Android 11 con almacenamiento en ámbito.

35voto

Jack Wade Puntos 231

Se produjeron algunos cambios importantes en el almacenamiento en Android 4.4 (ver Journey del almacenamiento de Android). Por lo tanto, lo siguiente es generalmente cierto para Android 4.4+ y especialmente 6+.

Esto es parte de mi respuesta detallada a ¿Cómo se utiliza el espacio en disco en un dispositivo Android?. Los archivos de las aplicaciones se guardan (tanto por el sistema como por la aplicación misma) en el almacenamiento interno y externo en diferentes categorías.

Directorio

Descripción/API

Código de la app

/data/app/*

(directorio de instalación de aplicaciones de usuario)

/data/app/*/base.apk

(archivo .apk original)

/data/app/*/lib//*.so

(bibliotecas compartidas)

/data/app/*/oat//base.[art|odex|vdex]

(código ejecutable compilado)

/data/dalvik-cache//*.[art|dex|oat|vdex]

(código ejecutable compilado, solo para aplicaciones del sistema)

/data/misc/profiles/cur///primary.prof

(perfil ART)

/data/misc/profiles/ref//primary.prof

(perfil ART)

Almacenamiento interno

/data/user[_de]//

getDataDir

/data/user[_de]///files

getFilesDir

/data/user[_de]///[code_]cache

getCacheDir o getCodeCacheDir

/data/user[_de]///databases

getDatabasePath

/data/user[_de]///no_backup

getNoBackupFilesDir

/data/user[_de]///shared_prefs

getSharedPreferences

Almacenamiento externo

/storage/emulated/obb//*.obb

(compartido por múltiples usuarios, expuesto en la vista siguiente)

/storage/emulated//Android/obb//*..obb

getObbDirs

/storage/emulated//Android/media/

getExternalMediaDirs

/storage/emulated//Android/data//

getExternalFilesDirs

/storage/emulated//Android/data//files

getExternalFilesDirs

/storage/emulated//Android/data//[code_]cache

getExternalCacheDirs

  • Todos los caminos anteriores dentro del almacenamiento interno y externo (primario y secundario) son directorios privados de la aplicación a los que puede acceder la aplicación respectiva sin necesidad de solicitar ningún permiso. Las aplicaciones también pueden crear otros directorios (no disponibles explícitamente a través de las API) en su almacenamiento privado. Todos estos directorios pertenecientes a una aplicación se eliminan cuando se desinstala la aplicación.

  • Además, las aplicaciones pueden colocar sus datos en cualquier lugar del almacenamiento externo primario (incluidos algunos directorios estándar y directorios privados de otras aplicaciones) si se otorga el permiso WRITE_EXTERNAL_STORAGE (getExternalStorageDirectory devuelve /storage/emulated/). Para el almacenamiento externo secundario y el almacenamiento extraíble, se utiliza SAF. Consulta los detalles en ¿Cómo guardar archivos en la tarjeta SD externa?.

    Sin embargo, en Android 10, se deprecia la escritura directa en el almacenamiento externo compartido primario (getExternalStorageDirectory y getExternalStoragePublicDirectory ya no están disponibles). Las aplicaciones deben usar uno de los proveedores de contenido integrados en Android; ya sea MediaStore (para archivos multimedia) o SAF (para cualquier otro tipo de archivos).

  • Los caminos /data pueden ser reemplazados por /mnt/expand/[UUID] al utilizar Almacenamiento Adoptable. /storage/emulated es reemplazado por /storage/[UUID] al utilizar almacenamiento externo secundario (como una tarjeta SD).

  • Para múltiples usuarios/perfiles, es diferente, el propietario del dispositivo siempre es 0. /data/user/0 es un enlace simbólico a /data/data por razones históricas. El almacenamiento externo secundario solo está disponible para el propietario del dispositivo.

  • El directorio OBB se comparte entre usuarios/perfiles (hasta Android 9) para ahorrar espacio. FUSE/sdcardfs siempre expone /storage/emulated/obb como /storage/emulated//Android/obb.

  • /data/user_de es el almacenamiento cifrado del dispositivo en dispositivos FBE que permite que ciertas aplicaciones se ejecuten al arrancar sin solicitar credenciales de usuario.

  • /data/misc/profiles es utilizado por ART para la compilación guiada por perfil del código de la aplicación.

  • La descripción de cada directorio es en parte evidente por los nombres, los detalles se pueden ver en la documentación de la API.

  • Los cachés se eliminan por el SO cuando se queda sin espacio, manteniendo las aplicaciones que superan la cuota asignada en la parte superior.

  • Los directorios privados de las aplicaciones en el almacenamiento externo no se escanean automáticamente por MediaScanner pero los directorios de media sí.

  • Los cachés y los directorios de no_backup no se respaldan en la nube. Consulta la documentación oficial.

0 votos

¿Dónde está /data? No se encuentra en el explorador de Windows al mostrar el almacenamiento interno al conectar el teléfono Android a la PC.

11voto

Tom Puntos 171

La respuesta a tu pregunta es demasiado extensa. Sin embargo, puedo darte una respuesta básica que cubra lo esencial.

Hay dos tipos de aplicaciones:
Root y no-root.

Las aplicaciones Root básicamente pueden almacenar/modificar archivos donde quieran.

Las aplicaciones no-root solamente pueden almacenar/modificar archivos aquí: /sdcard/ y en cada carpeta que viene después.
Generalmente, las aplicaciones instaladas se almacenan en /sdcard/Android/data o /sdcard/Android/obb.
Algunas aplicaciones almacenan sus archivos de configuración/juegos guardados en /sdcard/APPNAME/, o simplemente en el /sdcard/.

Para poder usar aplicaciones root, necesitarás haber rooteado tu dispositivo Android y haber dado permiso desde una de las aplicaciones de superusuario.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X