Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Almacenamiento tradicional

Icono de HAL de almacenamiento externo de Android

Android admite dispositivos con almacenamiento tradicional, que se define como un sistema de archivos que no distingue entre mayúsculas y minúsculas con modos y clases de permisos POSIX inmutables. La noción de almacenamiento tradicional abarca el almacenamiento portátil y emulado. El almacenamiento portátil se define como cualquier almacenamiento externo que no es adoptado por el sistema y, por lo tanto, no está formateado, cifrado o vinculado a un dispositivo específico. Debido a que el almacenamiento externo tradicional ofrece una protección mínima para los datos almacenados, el código del sistema no debe almacenar datos confidenciales en el almacenamiento externo. Específicamente, los archivos de configuración y de registro solo deben almacenarse en el almacenamiento interno donde se puedan proteger de manera efectiva.

Almacenamiento externo multiusuario

A partir de Android 4.2, los dispositivos pueden admitir varios usuarios y el almacenamiento externo debe cumplir las siguientes restricciones:

  • Cada usuario debe tener su propio almacenamiento externo primario aislado y no debe tener acceso al almacenamiento externo primario de otros usuarios.
  • La ruta /sdcard debe resolverse en el almacenamiento externo primario específico del usuario correcto según el usuario con el que se ejecuta un proceso.
  • El almacenamiento de archivos OBB grandes en el directorio Android/obb se puede compartir entre varios usuarios como una optimización.
  • Las aplicaciones no deben poder escribir en el almacenamiento externo secundario, excepto en directorios específicos del paquete, según lo permitan los permisos sintetizados.

La implementación de plataforma predeterminada de esta función aprovecha los espacios de nombres del kernel de Linux para crear tablas de montaje aisladas para cada proceso bifurcado de Zygote, y luego usa montajes de enlace para ofrecer el almacenamiento externo primario específico del usuario correcto en ese espacio de nombres privado.

En el arranque, el sistema monta un único demonio FUSE de almacenamiento externo emulado en EMULATED_STORAGE_SOURCE , que está oculto para las aplicaciones. Después de que Zygote se bifurca, enlaza monta el subdirectorio específico del usuario apropiado debajo del demonio FUSE a EMULATED_STORAGE_TARGET para que las rutas de almacenamiento externo se resuelvan correctamente para la aplicación. Debido a que una aplicación carece de puntos de montaje accesibles para el almacenamiento de otros usuarios, solo pueden acceder al almacenamiento del usuario con el que se inició.

Esta implementación también utiliza la función de kernel de subárbol compartido para propagar eventos de montaje desde el espacio de nombres raíz predeterminado a los espacios de nombres de la aplicación, lo que garantiza que funciones como los contenedores ASEC y el montaje OBB sigan funcionando correctamente. Para ello, monta el rootfs como compartido y luego vuelve a montarlo como esclavo después de que se crea cada espacio de nombres Zygote.

Múltiples dispositivos de almacenamiento externo

A partir de Android 4.4, los desarrolladores pueden Context.getExternalFilesDirs() varios dispositivos de almacenamiento externo a través de Context.getExternalFilesDirs() , Context.getExternalCacheDirs() y Context.getObbDirs() .

Los dispositivos de almacenamiento externo que surgen a través de estas API deben ser una parte semipermanente del dispositivo (como una ranura para tarjeta SD en el compartimento de la batería). Los desarrolladores esperan que los datos almacenados en estas ubicaciones estén disponibles durante largos períodos de tiempo. Por esta razón, los dispositivos de almacenamiento transitorio (como las unidades de almacenamiento masivo USB) no deben aparecer a través de estas API.

El permiso WRITE_EXTERNAL_STORAGE solo debe otorgar acceso de escritura al almacenamiento externo primario en un dispositivo. No se debe permitir que las aplicaciones escriban en dispositivos de almacenamiento externos secundarios, excepto en sus directorios específicos del paquete, según lo permitan los permisos sintetizados. Restringir las escrituras de esta manera asegura que el sistema pueda limpiar los archivos cuando se desinstalan las aplicaciones.

Soporte de medios USB

Android 6.0 admite dispositivos de almacenamiento portátiles que solo están conectados al dispositivo durante un período corto de tiempo, como unidades flash USB. Cuando un usuario inserta un nuevo dispositivo portátil, la plataforma muestra una notificación para permitirle copiar o administrar el contenido de ese dispositivo.

En Android 6.0, cualquier dispositivo que no se adopte se considera portátil. Debido a que el almacenamiento portátil está conectado por poco tiempo, la plataforma evita operaciones pesadas como el escaneo de medios. Las aplicaciones de terceros deben pasar por Storage Access Framework para interactuar con los archivos en el almacenamiento portátil; el acceso directo está explícitamente bloqueado por motivos de privacidad y seguridad.