¿Google bloquea las aplicaciones de Android para que no escriban en tarjetas SD?

Esta es una gran pregunta, y un tema que a veces es ampliamente mal entendido en el ámbito de Android. Para responder a su pregunta, observando la progresión del código fuente abierto de Google para Android en un contexto histórico, la respuesta es sí. Pero, si esto fue intencional o no, es una cuestión de perspectiva.

Comencemos con un poco de terminología. Desde los albores de Android, casi todos los tipos de almacenamiento se han considerado “almacenamiento externo”, incluso la memoria flash no extraíble que viene en cada dispositivo. Para distinguir, la memoria flash no extraíble se llama “almacenamiento primario”, mientras que una tarjeta micro SD extraíble se llama “almacenamiento secundario”. En las primeras versiones de Android, una aplicación simplemente necesitaba permiso para WRITE_EXTERNAL_STORAGE para poder acceder por completo a ambas primarias y almacenamiento secundario.

En marzo de 2011, se realizó una modificación en la codificación de Android que cambió drásticamente la forma en que el sistema operativo Android montó los medios de almacenamiento secundarios (tarjetas SD externas). Específicamente, la confirmación decía así: “Montar almacenamiento externo secundario grabable por AID_MEDIA_RW en lugar de AID_SDCARD_RW”. Esto significaba que los medios ahora tendrían que pertenecer al grupo “media_rw” para modificar el contenido de la tarjeta SD. Como resultado, se agregó un nuevo permiso, llamado WRITE_MEDIA_STORAGE, al código fuente. Básicamente, WRITE_MEDIA_STORAGE reemplazó el WRITE_EXTERNAL_STORAGE original. Sin embargo, y tal vez sin el conocimiento de Google, hubo un gran problema: no era posible que las aplicaciones normales solicitaran este permiso. el permiso tenía un nivel de protección de almacenamiento OrSignature, lo que significa que solo las aplicaciones del sistema podían solicitar el permiso. Entonces, el permiso WRITE_EXTERNAL_STORAGE solo podía dar permiso a las aplicaciones para escribir en el almacenamiento primario, pero no en el almacenamiento secundario (tarjetas micro SD externas). El WRITE_MEDIA_STORAGE el permiso puede escribir en la tarjeta micro SD externa, pero las aplicaciones de usuario normales no pueden solicitar el permiso. encaje en Android 3.2 Honeycomb, pero debido a la logística del hardware y los medios de almacenamiento en ese momento, apenas se notó.

Comenzando en la época de Android 4.4 KitKat, e incluso un poco antes, la implementación del sistema de archivos FUSE del espacio de usuario, junto con los cambios en el código fuente abierto, resolvió este problema. Sin embargo, aún hoy, incluso con Android 8.xx Oreo, las aplicaciones de terceros deben obtener explícitamente el permiso del usuario para el almacenamiento primario y secundario antes de que la aplicación pueda alterar cualquier medio de almacenamiento de alguna manera. Y, por supuesto, los nuevos conceptos de almacenamiento adoptable han aliviado los problemas a este respecto.

Sí, pero a través de algunos métodos especiales puedes usar esta función como JB