¿Podría enumerar todos los directorios posibles donde las aplicaciones de Android pueden almacenar datos, proporcionando una descripción de qué tipo de datos se almacenan en cada directorio?
Comentarios
- Consulte también: ¿Lista de carpetas especiales de tarjetas SD de Android? / ¿Es posible reorganizar la tarjeta SD? Porque hay un desastre ahí / ¿Qué directorios puedo eliminar en la SD interna? / Compruebe qué almacenamiento utiliza una aplicación.
- Además de Android Folder Hiearchy / ¿En qué parte del sistema de archivos se almacenan los mensajes SMS? / ¿En qué parte del sistema de archivos se instalan las aplicaciones?
Respuesta
Todas las aplicaciones (raíz o no) tienen un directorio de datos predeterminado, que es /data/data/<package_name>
. De forma predeterminada, las bases de datos de las aplicaciones, la configuración y todos los demás datos van aquí. Si una aplicación espera que se almacenen grandes cantidades de datos, o por otras razones quiere «ser amable con el almacenamiento interno», hay un directorio correspondiente en la tarjeta SDCard (Android/data/<package_name>
).
Aparte de eso, todas las aplicaciones pueden almacenar datos en cualquier lugar de la tarjeta SD, ya que no hay restricciones, y muchas aplicaciones lo hacen. Pueden usar los nombres de directorio libremente (y de nuevo lo hacen), que es lo que a menudo hace que sea difícil decidir para qué está destinado toda esa «basura» en la tarjeta y qué se puede eliminar.
Sin embargo, como Tom señaló , las aplicaciones raíz pueden almacenar sus datos en casi cualquier lugar de su dispositivo, por lo general siguen las mismas reglas que otras aplicaciones.
Puede encontrar una explicación general de la jerarquía de directorios de Android en mi respuesta aquí . Para su pregunta específica, podría agregar algunos detalles más sobre /data/data/<package_name>
(y la parte SD correspondiente):
-
databases/
: aquí están 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 de inicio» (y eso es básicamente, hablado en Linux) pueden colocar archivos donde quieran. Por lo general, estos archivos y directorios solo son accesibles por la aplicación misma (y la raíz, por supuesto) – distintos de los almacenados en la SDCard, a los que pueden acceder todas las aplicaciones.
Comentarios
- Los comentarios no son para una discusión extensa; esta conversación tiene se movido al chat .
Responder
Se produjeron algunos cambios importantes en el almacenamiento en Android 4.4 (consulte Viaje de almacenamiento de Android ). Entonces, lo siguiente es generalmente cierto para Android 4.4+ y particularmente 6+.
Esto es de mi respuesta detallada a ¿Cómo se usa el espacio en disco en un dispositivo Android? . Los archivos de las aplicaciones se guardan (por el sistema y la aplicación en sí) en el almacenamiento interno y externo en diferentes categorías.
DIRECTORY DESCRIPTION / API ===================================================================================== APP CODE ======== /data/app/<pkg>* (user apps installation directory) /data/app/<pkg>*/base.apk (original `.apk` file) /data/app/<pkg>*/lib/<arch>/*.so (shared libraries) /data/app/<pkg>*/oat/<arch>/base.[art|odex|vdex] (compiled executable code) /data/dalvik-cache/<arch>/*.[art|dex|oat|vdex] (compiled executable code, only for system apps) /data/misc/profiles/cur/<user_id>/<pkg>/primary.prof (ART profile) /data/misc/profiles/ref/<pkg>/primary.prof (ART profile) INTERNAL STORAGE ================ /data/user[_de]/<user_id>/<pkg> getDataDir /data/user[_de]/<user_id>/<pkg>/files getFilesDir /data/user[_de]/<user_id>/<pkg>/[code_]cache getCacheDir or getCodeCacheDir /data/user[_de]/<user_id>/<pkg>/databases getDatabasePath /data/user[_de]/<user_id>/<pkg>/no_backup getNoBackupFilesDir /data/user[_de]/<user_id>/<pkg>/shared_prefs getSharedPreferences EXTERNAL STORAGE ================ /storage/emulated/obb/<pkg>/*.obb (shared by multi-users, exposed in following view) /storage/emulated/<user_id>/Android/obb/<pkg>/*.<pkg>.obb getObbDirs /storage/emulated/<user_id>/Android/media/<pkg> getExternalMediaDirs /storage/emulated/<user_id>/Android/data/<pkg>/ /storage/emulated/<user_id>/Android/data/<pkg>/files getExternalFilesDirs /storage/emulated/<user_id>/Android/data/<pkg>/[code_]cache getExternalCacheDirs
-
Todo lo anterior Las rutas en el almacenamiento interno y externo (primario y secundario) son directorios privados de la aplicación a los que puede acceder la aplicación respectiva sin solicitar ningún permiso. Las aplicaciones también pueden crear otros directorios (no disponibles explícitamente a través de API) en su almacenamiento privado. Todos estos directorios que pertenecen 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 otras aplicaciones» directorios privados «) si
WRITE_EXTERNAL_STORAGE
se concede permiso (getExternalStorageDirectory
devuelve/storage/emulated/<user_id>
). Para el almacenamiento externo secundario y el almacenamiento extraíble se utiliza SAF. Consulte los detalles en ¿Cómo guardar archivos en una tarjeta SD externa? .Sin embargo, en Android 10, escribir directamente en el almacenamiento compartido externo principal está obsoleto (
getExternalStorageDirectory
ygetExternalStoragePublicDirectory
son no hay más disponible). Las aplicaciones deben utilizar uno de los proveedores de contenido integrados de Android; MediaStore (para archivos multimedia) o SAF (para cualquier otro tipo de archivos). -
pueden ser reemplazadas por
/mnt/expand/[UUID]
cuando se usa Adoptable Storage./storage/emulated
se reemplaza por/storage/[UUID]
cuando se usa un almacenamiento externo secundario (como una tarjeta SD). -
Para varios usuarios / perfiles,
<user_id>
es diferente, el propietario del dispositivo es siempre0
./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. - aña El directorio OBB se comparte entre usuarios / perfiles (hasta Android 9) para ahorrar espacio. FUSE /
sdcardfs
siempre expone/storage/emulated/obb
como/storage/emulated/<user_id>/Android/obb
. -
/data/user_de
es el almacenamiento encriptado del dispositivo en los dispositivos FBE que permite que ciertas aplicaciones se ejecuten en el arranque sin solicitar las credenciales del usuario. -
/data/misc/profiles
son utilizados por ART para compilación guiada por perfiles del código de la aplicación. -
La descripción de cada directorio es algo evidente a partir de los nombres; los detalles se pueden ver en la documentación de la API .
-
El sistema operativo borra las cachés cuando se está agotando el almacenamiento, lo que mantiene las aplicaciones que exceden la cuota asignada en la parte superior.
-
Aplicaciones «privadas
files
los directorios del almacenamiento externo no son «escaneados automáticamente por MediaScanner , pero los directoriosmedia
sí. -
Las cachés y los directorios
no_backup
no se respaldan en la nube. Consulte la documentación oficial .
Respuesta
La respuesta a la pregunta que hace es demasiado grande. Sin embargo, puedo darte una respuesta básica que cubre los conceptos básicos.
Hay dos tipos de aplicaciones:
Root y no root .
Root las aplicaciones básicamente pueden almacenar / modificar archivos donde quieran. Las aplicaciones
no root solo pueden almacenar / modificar archivos aquí: /sdcard/
y todas las carpetas posteriores.
En su mayoría, las aplicaciones instaladas se almacenan en /sdcard/Android/data
o /sdcard/Android/obb
.
Algunas las aplicaciones almacenan sus juegos guardados / archivos de datos de configuración en /sdcard/APPNAME/
, o simplemente en /sdcard/
Para poder usar root aplicaciones, necesitará haber rooteado su dispositivo Android y haber dado permiso a una de las aplicaciones de superusuario.