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

Almacenamiento con alcance

El almacenamiento limitado limita el acceso de la aplicación al almacenamiento externo. En Android 11 o superior, las aplicaciones orientadas a API 30 o superior deben usar almacenamiento de alcance. Anteriormente, en Android 10, las aplicaciones podían optar por excluirse del almacenamiento de alcance.

Restricciones de acceso a la aplicación

El objetivo del almacenamiento de alcance es proteger la privacidad de la aplicación y los datos del usuario. Esto incluye proteger la información del usuario (como los metadatos de las fotos), evitar que las aplicaciones modifiquen o eliminar archivos del usuario sin un permiso explícito y proteger los documentos confidenciales del usuario descargados en Descargas u otras carpetas.

Las aplicaciones que utilizan almacenamiento de ámbito pueden tener los siguientes niveles de acceso (el acceso real es específico de la implementación).

  • Lea y acceso de escritura a sus propios archivos sin permisos
  • El acceso de lectura a los archivos multimedia de otras aplicaciones con READ_EXTERNAL_STORAGE permiso
  • El acceso de escritura a los archivos multimedia de otras aplicaciones sólo se permite con el consentimiento del usuario directa (excepciones otorgadas a la galería de sistema y aplicaciones que son elegibles para el acceso a todos los archivos)
  • Sin lectura o escritura a los directorios de datos de la aplicación externa de otras aplicaciones

Uso de almacenamiento con alcance con FUSE

Android 11 o más soportes del sistema de archivos en espacio de usuario (FUSE), lo que permite que el módulo Mediaprovider para examinar las operaciones de archivo en el espacio de usuario y una puerta de acceso a los archivos de base a la política para permitir, denegar el acceso o se corrijan. Las aplicaciones en el almacenamiento con alcance que usan FUSE obtienen las características de privacidad del almacenamiento con alcance y la capacidad de acceder a archivos usando una ruta de archivo directa (manteniendo las API de archivos funcionando en las aplicaciones).

Android 10 impuso reglas de almacenamiento con alcance en los accesos a archivos por parte de MediaProvider, pero no para el acceso directo a la ruta del archivo (por ejemplo, usando la API de archivos y las API de NDK) debido al esfuerzo requerido para interceptar las llamadas del kernel. Como resultado, las aplicaciones en el almacenamiento con alcance no podían acceder a los archivos mediante una ruta de archivo directa. Esta restricción afectó la capacidad de los desarrolladores de aplicaciones para adaptarse, ya que requirió cambios sustanciales en el código para reescribir el acceso de la API de archivos a la API de MediaProvider.

FUSE y SDCardFS

Android 11 soporte para fusible no está relacionada con la desaprobación de SDCardFS , pero proporciona una alternativa a la tienda de medios para los dispositivos que antes utilizaban SDCardFS. Dispositivos:

  • El lanzamiento con Android 11 o superior con kernel 5.4 o superior no puede usar SDCardFS.
  • La actualización a Android 11 o superior puede alojar FUSE sobre SDCardFS para interceptar las operaciones del archivo y cumplir con los objetivos de privacidad.

Ajuste del rendimiento de FUSE

Android anteriormente era compatible con FUSE en Android 7 o versiones anteriores, en el que el almacenamiento externo se montó como FUSE. Debido a problemas de rendimiento y punto muerto con esa implementación de FUSE, Android 8 introdujo SDCardFS. Android 11 vuelve a introducir soporte para fusible utilizando un procedimiento mejorado, una mejor aplicación de la prueba- libfuse que puede ser sintonizado para resolver los problemas de rendimiento en Android 7 o inferior.

El ajuste de FUSE incluye los siguientes ajustes:

  • Sin pasar por fusible para el Android/data y Android/obb directorios para mejorar el rendimiento para aplicaciones de juegos que se basan en estos directorios.
  • Optimizaciones (como ajustar las proporciones de lectura anticipada y sucia del sistema de archivos FUSE) para mantener el rendimiento de las lecturas y la reproducción fluida de los medios.
  • Utilizando la caché de escritura diferida de FUSE.
  • Permisos de almacenamiento en caché para reducir los IPC al servidor del sistema.
  • Optimizaciones para aplicaciones con acceso a Todos los archivos para agilizar las operaciones masivas.

Los ajustes de ajuste anteriores pueden producir un rendimiento comparable entre dispositivos FUSE y no FUSE. Por ejemplo, al probar un Pixel 2 sintonizado con FUSE y un Pixel 2 con Media Store, se encontró un rendimiento de lectura secuencial comparable (por ejemplo, reproducción de video) entre el acceso a la ruta del archivo y Media Store. Sin embargo, las escrituras secuenciales fueron un poco peores con FUSE, y las lecturas y escrituras aleatorias podrían ser hasta el doble de lentas.

Las medidas de rendimiento pueden cambiar de un dispositivo a otro y entre casos de uso específicos. Debido a que las API de MediaProvider brindan el rendimiento más consistente, los desarrolladores de aplicaciones que estén preocupados por el rendimiento deben usar las API de MediaProvider para sus aplicaciones.

Mitigación del impacto en el rendimiento de FUSE

Impacto en el rendimiento de fusibles se limita a grandes usuarios de los archivos almacenados en el almacenamiento compartido externo. Almacenamiento privado externo (que incluye android/data y android/obb directorios) se pasa por alto por FUSE, mientras que el almacenamiento interno (tales como /data/data , donde muchas de las aplicaciones almacenan datos para mantenerlo seguro y cifrado) no está montado fusible.

  • Las aplicaciones que son usuarios livianos de almacenamiento externo compartido a menudo interactúan con un conjunto limitado de archivos (por lo general, menos de 100 archivos). Estas aplicaciones se benefician de las optimizaciones existentes de operaciones comunes de lectura y escritura y no deberían ver ningún impacto en el rendimiento relacionado con FUSE en Android 11.

  • Las aplicaciones que son grandes usuarios de almacenamiento externo compartido suelen realizar operaciones de archivo masivas, como enumerar o eliminar un directorio con 1000 archivos, o crear o eliminar un directorio con un millón de archivos en el sistema de archivos. Las operaciones de archivos a granel podrían ser impactados por fusible en Android 11, pero si estas aplicaciones son elegibles para el MANAGE_EXTERNAL_STORAGE permiso, se benefician de las optimizaciones de rendimiento incluidos en la actualización de octubre de año 2020.

Para evitar una sobrecarga de rendimiento FUSE, las aplicaciones pueden almacenar datos en las API de almacenamiento o uso a granel privados externos en el ContentProvider clase para sobrepasar el fusible y obtener un camino de rendimiento optimizado. Además, la actualización de octubre de 2020 para el componente del sistema Mediaprovider incluye optimizaciones de rendimiento para administradores de archivos y aplicaciones similares (como copia de seguridad / restauración, antivirus) que sujetan la MANAGE_EXTERNAL_STORAGE permiso.

Privacidad sobre rendimiento

En los dispositivos que se han ajustado para FUSE, la mayoría de los recorridos de los usuarios críticos tienen el mismo rendimiento entre Android 10 y Android 11. Sin embargo, cuando se realizan pruebas comparativas en un conjunto de operaciones de archivos, Android 11 puede funcionar peor que Android 10. Para patrones de acceso a archivos que funcionan peor en Android 11 (por ejemplo, lecturas o escrituras aleatorias), recomendamos usar las API de MediaProvider para dar a las aplicaciones un modo de acceso que no sea FUSE, que es la mejor opción y con un rendimiento constante.

Actualizaciones de MediaProvider y FUSE

El Mediaprovider sistema difiere del comportamiento del componente entre versiones de Android.

  • En Android 10 y versiones anteriores, SDCardFS era el sistema de archivos y MediaProvider proporcionaba una interfaz para colecciones de archivos (por ejemplo, imágenes, videos, archivos de música, etc.). Cuando una aplicación creaba un archivo usando File API, podía pedirle a MediaProvider que escaneara el archivo y lo registrara en la base de datos.

  • En Android 11 o superior, SDCardFS es obsoleto y Mediaprovider se convierte en el controlador de sistema de archivos (por FUSE) para almacenamiento externo, haciendo que el sistema de archivos de almacenamiento externo y la base de datos Mediaprovider consistente. Como controlador del espacio de usuario para el sistema de archivos FUSE, MediaProvider puede interceptar las llamadas del kernel y garantizar que las operaciones del archivo sean seguras para la privacidad.

En Android 11 y superior, Mediaprovider es también un componente del sistema modular (un módulo de la línea principal) que puede actualizarse fuera de comunicados de Android. Esto significa que los problemas de rendimiento, privacidad o seguridad que se encuentran en MediaProvider pueden solucionarse y enviarse por aire desde Google Play Store u otros mecanismos proporcionados por socios. Todo lo que esté dentro del alcance de lo que se espera de un controlador FUSE también es actualizable, lo que permite actualizaciones para corregir errores y regresiones de rendimiento de FUSE.