Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

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 dispositivos Android con soporte de almacenamiento tradicional , que incluye el almacenamiento portátil y emulado. Almacenamiento portátil puede ser proporcionada por medios físicos, como una tarjeta SD o USB, que es para el almacenamiento de datos / transferencia de archivos temporales. 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 han estado disponibles como almacenamiento portátil desde Android 1.0; Android 6.0 agregó soporte USB. Almacenamiento emulado se proporciona mediante la exposición de una porción de almacenamiento interno a través de una capa de emulación y ha estado disponible desde Android 3.0.

A partir de Android 6.0, Android es compatible con el almacenamiento adoptables , que es proporcionada por medios físicos, como una tarjeta SD o USB, que se cifra y formateado para comportarse como 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 a escritura se protege con el WRITE_EXTERNAL_STORAGE permiso. A partir de Android 4.1, el acceso de lectura se protege con el READ_EXTERNAL_STORAGE permiso.

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 a las aplicaciones para administrar sus directorios específicos paquete de almacenamiento externo sin necesidad de que poseen el amplio WRITE_EXTERNAL_STORAGE permiso. Por ejemplo, la aplicación con el nombre del paquete com.example.foo ahora puede acceder libremente 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 se dirigen Android 9 y menor defecto para el almacenamiento de legado, y se puede optar por el almacenamiento aislado. Aplicaciones Android ese objetivo 10 y por defecto para el almacenamiento aislado puede optar temporalmente fuera de ella. Utilice el atributo de manifiesto requestLegacyExternalStorage , que controla el modelo de almacenamiento, para cambiar el estado por defecto.

Dado que ambos READ_EXTERNAL_STORAGE y WRITE_EXTERNAL_STORAGE permisos son suaves restringida, si el instalador no hizo la lista blanca de la aplicación, el acceso a controles de permisos sólo las colecciones visuales y auditivas, que no tienen acceso a la tarjeta SD. Esto se aplica incluso si la aplicación solicita almacenamiento heredado. Para obtener más información acerca de las dos restricciones duras y blandas restricciones, consulte duro y restricciones blandas 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 la configuración del READ_EXTERNAL_STORAGE permiso, ver setWhitelistedRestrictedPermissions() en el PackageInstaller.SessionParams clase.

Permisos en tiempo de ejecución

Android 6.0 introduce una nueva permisos de ejecución modelo en aplicaciones solicitud de capacidades cuando sea necesario en tiempo de ejecución. Debido a que el nuevo modelo incluye las READ/WRITE_EXTERNAL_STORAGE permisos, las necesidades de la plataforma de acceso de almacenamiento subvención de forma dinámica sin matar o reiniciar aplicaciones ya se encuentra corriendo. Lo hace manteniendo tres vistas distintas de todos los dispositivos de almacenamiento montados:

  • /mnt/runtime/default se muestra a aplicaciones sin permisos especiales de conservación, y para el espacio de nombres raíz donde adbd y otros componentes del sistema en vivo.
  • /mnt/runtime/read se muestra a aplicaciones con READ_EXTERNAL_STORAGE (Set LEGACY_STORAGE para Android 10)
  • /mnt/runtime/write se muestra a 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 conceden permisos de ejecución, vold salta en el espacio de nombres de montaje de aplicaciones ya se encuentra corriendo y montaje de vínculos de la visión mejorada en su lugar. Tenga en cuenta que las degradaciones de permisos siempre dan como resultado la eliminación de la aplicación.

El setns() funcionalidad utilizada para implementar esta función requiere al menos Linux 3.8, pero los parches se han portado con éxito a Linux 3.4. El PermissionsHostTest evaluación CTS se puede usar para verificar el comportamiento del kernel correcto.