Ho realizzato tipo oggi una cosa che tecnicamente già sapevo di #Android, ma boh, non ci ho mai riflettutto. La memoria di archiviazione normale per i file è tutta una gigantesca hack!!! E programmando applicazioni si deve pagare le conseguenze di ciò... ooooooODIO ANDROID, diamine. 😩️
Anche me di 8 anni rimaneva un po' puzzled dal fatto che, sui dispositivi che avevo all'epoca, il percorso /sdcard
non era la schedina microSD, ma la memoria interna del coso. Però, cosa doveva frecarmi? Voglio dire, a funzionare funzionava comunque tutto... E idem quando poi iniziai a vedere /storage/emulated/0
: emulazione di non si sa che sfaccimm, ma vabbé. 😴️
A quanto pare, storicamente gli androidi non avevano alcuna #archiviazione di file utente interna (!) standardizzata. Quindi, c'erano i dispositivi con relativamente tanta flash, che montavano una parte di questa su /sdcard
(o simili) come succede oggi... e poi c'erano quelli sfigati con solo la partizione interna privata (/data
), e che senza microSD fisica non facevano fare nulla, manco scattare foto (cacca). 😳️
A leggere oggi i metodi #Java per l'ottenimento dei percorsi usciti fuori da quei tempi — che ancora non sono stati deprecati eh, e quindi ancora devono essere usati per fare determinate cose — si impazzisce per davvero. Perché si ha in sostanza roba getExternal...Dir()
e getExternalStorage...()
che, su qualunque dispositivo degli ultimi 10 anni (forse 15), in realtà puntano all'archiviazione interna. 😔️
Il disastro in retrospettiva non si capisce esattamente quando si è fermato, ma credo con l'arrivo di KitKat... che ha rotto un sacco le scatole all'epoca, per chi si ricorda, con i suoi permessi nuovi (quando Google rompe qualcosa, non è mai la prima volta), però intanto credo sia stata la versione che ha standardizzato la memoria fisicamente esterna come "memoria secondaria". 🤧️
E quindi da quel momento c'è la #API getExternalFilesDirs()
(plurale), che da in lista tutte le "memorie esterne", con la prima che è quella in realtà interna (e si chiama "primaria"), e le altre che sono in genere esterne per davvero, però si chiamano "esterne secondarie". Troppo confusionario? Immaginate di dover programmare. 😉️🗡️
La cosa bella è che tutto questo non tiene neanche conto in primis dell'archiviazione adottabile aggiunta tempo dopo (Marshmallow), che è talmente un casino da essere buggata su molti dispositivi e infatti disattivata da molti vendor, e poi dell'archiviazione scoped introdotta ancora dopo (10-11) che come sapete da utente amo tantissimo (sarcasmo). Ma, io digresso. 💀️
In realtà, a parte i lati negativi, lo scoped #storage ha un suo vantaggio, cioè che genericizza ancora di più l'accesso a memorie esterne e non solo (anche a percorsi della memoria interna privata di app programmate per condividerli, ad esempio Termux!). Lo dico semplicemente per riconoscere che, prima di lui, la API era veramente terribile, e lo sto sperimentando sulla mia pelle adesso. 🥶️
Ho a malapena iniziato a scrivere quello che serve per supportare tutte le minchiate della memoria nella #SpaccWebView Android, e già è lollissimo, nonostante tutti i TODO ancora da sostituire. E tutto ciò serve... per via di OEM tipo Samsung (ma non solo): su Stackoverflow leggo che i developer dell'epoca non erano felici del fatto che la microSD fosse montata in /sdcard/external_sd
(o simili)... 🤭️
Per chi vuole approfondire oltre: https://medium.com/@emilynguyen1212/demystifying-internal-vs-external-storage-in-modern-android-54df92bbc563, https://blog.wislon.io/posts/2014/11/20/xamarin-and-android-kitkat-and-your-external-sd-card (, e altro non so). Io ora basta. 🥴️