Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
This page was translated by the Cloud Translation API.
Switch to English

Almacenamiento

Icono de HAL de almacenamiento externo de Android

Android ha evolucionado con el tiempo para admitir una amplia variedad de tipos y funciones de dispositivos de almacenamiento. Todas las versiones de Android admiten dispositivos con almacenamiento tradicional , que incluye almacenamiento portátil y emulado. El almacenamiento portátil se puede proporcionar mediante un medio físico, como una tarjeta SD o USB, que es para la transferencia temporal de datos / almacenamiento de archivos. Los medios físicos pueden permanecer con el dispositivo durante un período de tiempo prolongado, pero no están vinculados al dispositivo y se pueden quitar. Las tarjetas SD están disponibles como almacenamiento portátil desde Android 1.0; Android 6.0 agregó soporte USB. El almacenamiento emulado se proporciona al exponer una parte del almacenamiento interno a través de una capa de emulación y está disponible desde Android 3.0.

A partir de Android 6.0, Android admite el almacenamiento adoptable , que se proporciona mediante medios físicos, como una tarjeta SD o USB, que está encriptado y formateado para comportarse como un almacenamiento interno. El almacenamiento adoptable puede almacenar todo tipo de datos de aplicaciones.

Permisos

El acceso al almacenamiento externo está protegido por varios permisos de Android. A partir de Android 1.0, el acceso de escritura está protegido con el permiso WRITE_EXTERNAL_STORAGE . A partir de Android 4.1, el acceso de lectura está protegido con el permiso READ_EXTERNAL_STORAGE .

A partir de Android 4.4, el propietario, el grupo y los modos de los archivos en los dispositivos de almacenamiento externos ahora se sintetizan en función de la estructura de directorios. Esto permite que las aplicaciones administren sus directorios específicos de paquetes en un almacenamiento externo sin requerir que tengan el permiso WRITE_EXTERNAL_STORAGE amplio. Por ejemplo, la aplicación con el nombre de paquete com.example.foo ahora puede acceder libremente a Android/data/com.example.foo/ en dispositivos de almacenamiento externos sin permisos. Estos permisos sintetizados se logran al empaquetar los dispositivos de almacenamiento sin procesar en un demonio FUSE.

A partir de Android 10, las aplicaciones que tienen como destino Android 9 y bajan el valor predeterminado al almacenamiento heredado, y pueden optar por el almacenamiento aislado. Las aplicaciones que tienen como destino Android 10 y que tienen un almacenamiento aislado de forma predeterminada pueden optar por no participar temporalmente . Utilice el atributo de manifiesto requestLegacyExternalStorage , que controla el modelo de almacenamiento, para cambiar el estado predeterminado.

Dado que los READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE están restringidos por software, si el instalador no incluyó la aplicación en la lista blanca, el permiso controla el acceso solo a las colecciones auditivas y visuales, sin acceso a la tarjeta SD. Esto se aplica incluso si la aplicación solicita almacenamiento heredado. Para obtener más información sobre restricciones estrictas y suaves, consulte Restricciones estrictas y suaves en Android 10 .

Si el instalador incluyó el permiso en la lista blanca, una aplicación que se ejecuta en modo heredado obtiene el comportamiento de permiso no aislado. El permiso controla el acceso a la tarjeta SD y las colecciones visuales y auditivas. Esto sucede cuando la aplicación se dirige a Android 9 o versiones anteriores y no opta por el almacenamiento aislado, o se dirige a Android 10 y se excluye.

El estado de la lista blanca solo se puede especificar en el momento de la instalación y no se puede cambiar hasta que se haya instalado la aplicación.

Para obtener más información sobre cómo configurar el permiso READ_EXTERNAL_STORAGE , consulte setWhitelistedRestrictedPermissions() en la clase PackageInstaller.SessionParams .

Permisos en tiempo de ejecución

Android 6.0 presenta un nuevo modelo de permisos en tiempo de ejecución donde las aplicaciones solicitan capacidades cuando las necesitan en tiempo de ejecución. Debido a que el nuevo modelo incluye los permisos READ/WRITE_EXTERNAL_STORAGE , la plataforma debe otorgar acceso al almacenamiento de forma dinámica sin matar o reiniciar las aplicaciones que ya se están ejecutando. Para ello, mantiene tres vistas distintas de todos los dispositivos de almacenamiento montados:

  • /mnt/runtime/default se muestra a las aplicaciones sin permisos especiales de almacenamiento y al espacio de nombres raíz donde adbd y otros componentes del sistema.
  • /mnt/runtime/read se muestra en las aplicaciones con READ_EXTERNAL_STORAGE (Establecer LEGACY_STORAGE para Android 10)
  • /mnt/runtime/write se muestra en aplicaciones con WRITE_EXTERNAL_STORAGE

En el momento de la bifurcación de Zygote, creamos un espacio de nombres de montaje para cada aplicación en ejecución y enlazamos el montaje de la vista inicial adecuada en su lugar. Más tarde, cuando se otorgan permisos de tiempo de ejecución, vold salta al espacio de nombres de montaje de las aplicaciones que ya se están ejecutando y enlaza monta la vista actualizada en su lugar. Tenga en cuenta que las rebajas de permisos siempre dan como resultado la eliminación de la aplicación.

La funcionalidad setns() utilizada para implementar esta característica requiere al menos Linux 3.8, pero los parches se han actualizado con éxito a Linux 3.4. La prueba PermissionsHostTest CTS se puede utilizar para verificar el comportamiento correcto del kernel.