Google sta bloccando le applicazioni Android dalla scrittura su schede SD?
Questa è una grande domanda, e un argomento che a volte è ampiamente frainteso nell'arena Android. Per rispondere alla tua domanda, guardando la progressione del codice open source di Google per Android in un contesto storico, la risposta è sì. Ma, se questo fosse intenzionale o meno è una questione di prospettiva.
Iniziamo con un po' di terminologia. Fin dagli albori di Android, quasi ogni tipo di storage è stato considerato "storage esterno", anche la memoria flash non rimovibile che viene fornita in ogni dispositivo. Per distinguere, la memoria flash non rimovibile è chiamata "archiviazione primaria", mentre una scheda micro SD rimovibile è chiamata "archiviazione secondaria". Nelle prime versioni di Android, un'app aveva semplicemente bisogno del permesso di WRITE_EXTERNAL_STORAGE per essere in grado di accedere completamente sia alla memoria primaria che a quella secondaria.
Nel marzo 2011, è stata fatta una modifica alla codifica di Android che ha cambiato drasticamente il modo in cui i supporti di archiviazione secondaria (schede SD esterne) sono stati montati dal sistema operativo Android. In particolare, il commit recitava così: "Montare l'archiviazione esterna secondaria scrivibile con AID_MEDIA_RW piuttosto che AID_SDCARD_RW". Questo significava che il supporto avrebbe dovuto appartenere al gruppo "media_rw" per modificare il contenuto della scheda SD. Di conseguenza, una nuova autorizzazione, chiamata WRITE_MEDIA_STORAGE, è stata aggiunta al codice sorgente. Fondamentalmente, WRITE_MEDIA_STORAGE ha sostituito l'originale WRITE_EXTERNAL_STORAGE. Tuttavia, e forse all'insaputa di Google, c'era un grosso problema: non era possibile per le app regolari richiedere questo permesso. Il nuovo permesso aveva un livello di protezione di storageOrSignature, il che significa che solo le app di sistema potevano richiedere il permesso. Così ora, il permesso WRITE_EXTERNAL_STORAGE poteva solo dare alle app il permesso di scrivere sulla memoria primaria, ma non sulla memoria secondaria (schede micro SD esterne). Il permesso WRITE_MEDIA_STORAGE poteva scrivere sulla scheda micro SD esterna, ma le normali app utente non potevano richiedere il permesso. Questo cambiamento è effettivamente avvenuto su Android 3.2 Honeycomb, ma a causa della logistica dell'hardware e dei supporti di memorizzazione di allora, è stato a malapena notato.
A partire dall'epoca di Android 4.4 4 KitKat, e anche un po' prima, l'implementazione del filesystem userspace FUSE, insieme alle modifiche al codice open source, ha risolto questo problema. Eppure, ancora oggi, anche con Android 8.x.x Oreo, le app di terze parti devono ottenere esplicitamente il permesso dell'utente sia per lo storage primario che per quello secondario prima che l'app possa alterare entrambi i supporti di memorizzazione in qualsiasi modo. E naturalmente, i concetti più recenti di archiviazione adottabile hanno alleviato i problemi a questo proposito.