¿Por qué las aplicaciones pueden acceder a toda la tarjeta SD?

¿Hay alguna razón técnica por la que las aplicaciones que solo necesitan sus propios datos no estén limitadas a una carpeta? Me doy cuenta de que algunas aplicaciones usan los datos de otras aplicaciones, pero es mucho más probable que instale una aplicación que solo solicite permiso para almacenar archivos en una carpeta específica.

Respuestas (3)

Existen diferentes mecanismos para almacenar datos en una aplicación de Android que no necesitan el permiso de acceso de la tarjeta SD. Puede crear bases de datos, almacenar parámetros de aplicaciones, crear archivos en el almacenamiento interno. Todo esto no requerirá ningún permiso específico y solo la aplicación que los creó puede acceder a estos datos.

Por otro lado, si una aplicación necesita el permiso de la tarjeta SD, puede ser porque tiene una gran cantidad de datos para almacenar o porque quiere modificar/agregar/eliminar archivos, como en un administrador de archivos. Pero para datos importantes específicos de la aplicación, no se recomienda la tarjeta SD porque podría retirarse en cualquier momento (o montarse como una unidad USB) y no estar disponible para las aplicaciones.

Creo que muchas aplicaciones que solicitan permiso de acceso SD podrían usar otro tipo de almacenamiento de datos que no lo requiera. Además, los archivos creados en la SD por una aplicación no se eliminarán al desinstalar la aplicación, pero sí lo harán todos los demás tipos de almacenamiento de datos internos. Entonces, para mí, sería una mejor práctica de desarrollo no usar la SD si no es necesaria, y como mencionaste, no asustaría a las personas como las aplicaciones que acceden a la SD completa.

Las tarjetas SD generalmente usan el sistema de archivos FAT, que no permite permisos del sistema de archivos. Esto significa que el sistema operativo Android tendría que administrar una lista personalizada de archivos, sus permisos, una asignación de aplicaciones a archivos/carpetas, etc. para evitar que las aplicaciones accedan a toda la tarjeta. Esto sería un lío terrible. No solo complicado, sino que requeriría mucho espacio de almacenamiento. Y luego, un día, saca su tarjeta SD y elimina algunas imágenes, y todo el sistema se rompe. Entiendes la idea.

No veo cómo enjaular el acceso al sistema de archivos de una aplicación sería un desastre, y especialmente cómo eliminar algunas imágenes lo rompería.
Bueno, eliminar archivos no necesariamente lo rompería, si la administración fuera lo suficientemente compleja. Pero agregar archivos sería un problema. Permitir que cualquier aplicación acceda a los nuevos archivos es un problema, y ​​rechazar cualquiera hace que los archivos sean inútiles. Podría tener una carpeta de Dropbox específica, lo que nuevamente hace que la administración sea más compleja. Pero, ¿cómo obligas a alguien a mover archivos a la tarjeta desde su PC para usar la carpeta de Dropbox? no puedes Podría volver a hacer que la administración sea más compleja y hacer que mueva los archivos nuevos a Dropbox. Pero siempre habrá otra manera de romperlo.
Los medios extraíbles están diseñados para ser eliminados y alterados por otros dispositivos y, por lo tanto, los intentos de administrarlos son básicamente inútiles. ¿Esperaría que Windows/Linux/MacOS evite que las aplicaciones individuales accedan a una tarjeta SD conectada a su teléfono? ¿Le gustaría configurar cuáles de sus 100 aplicaciones pueden acceder a qué partes de la tarjeta? Es mucho más fácil simplemente no poner cosas importantes en la tarjeta SD si va a instalar aplicaciones aleatorias que no son de confianza. Despotricar hecho :P

Como explicó Matthew Read, con una tarjeta SD normal que usa el sistema de archivos FAT, no es posible usar los permisos de archivo para controlar el acceso de las aplicaciones, de la misma manera que Android controla su acceso a los archivos en el sistema de archivos interno. Pero ahora que los teléfonos Android usan almacenamiento interno en lugar de tarjetas SD, y usan MTP para ofrecer acceso a través de USB en lugar de la clase de dispositivo de almacenamiento masivo, los teléfonos Android pueden usar mejores sistemas de archivos para su gran almacenamiento de datos.

KitKat agregó un nuevo mecanismo para que las aplicaciones almacenen archivos grandes. En el almacenamiento USB interno, cada aplicación obtiene un directorio de datos privados, al igual que en la memoria del dispositivo más pequeño. (En algunos dispositivos, estos pueden ser incluso el mismo sistema de archivos). Las aplicaciones pueden acceder a su directorio privado en este sistema de archivos sin necesidad de permisos especiales. Ahora también es posible que las aplicaciones solo soliciten el permiso "leer tarjeta SD" y "escribir tarjeta SD" en versiones de Android anteriores a KitKat, si solo necesitan la tarjeta SD para usar un directorio privado como este.

Los viejos directorios compartidos como "Descargas", "Música" y "Notificaciones" todavía están presentes como antes y aún necesitan los mismos permisos para acceder. Las aplicaciones antiguas que no se han actualizado para KitKat seguirán usando esos directorios, no los nuevos directorios privados.