In questi giorni sono un po' meno salata del solito riguardo #Android, forse perché i trucchi dell'altro giorno hanno risolto la #rogna che più di tutte mi faceva incazzare... ma i #problemi restano!!! Sto usando abbastanza il telefono di recente, quindi tra le mie robe hackerine l'archiviazione mi si è riempita di nuovo, e di file da cancellare al volo non ne ho... però, mi ricordo che su Android le app finiscono (quasi) sempre ad occupare più spazio del loro peso di #APK, quindi buona parte del mio #storage è sprecata! L'ho accennato qualche volta, ma mai discusso, ma in pratica in /data/app/<pacchetto>/
vengono memorizzate le seguenti cose extra dal sistema, che le fabbrica a partire dagli APK. ⛏️
./oat/base.{odex,vdex,art}
(link interessanti su memos.octt.eu.org/m/bHLZbc9LLVmkehsLxfoVSn): file di compilazione -Of-Ahead-Time della runtime Android, praticamente il codice DalvikEXecutable ricompilato come nativo... Senza spiegare tutti i dettagli, servirebbero per velocizzare avvio ed esecuzione, però per certe app questi diventano letteralmente enormi; soprattutto il VDEX, che (stando a Google) conterrebbe copie 1:1 (di parti?) del #DEX assieme al codice aggiuntivo... sul mio Ximi per CapCut era 130 MB solo lui (quindi, tutta la cartella non-dati della app aveva superato i 500 MB!). 💣️
./lib/*.so
: librerie native estratte dall'APK per l'architettura del proprio sistema... certo, queste servono, ma il punto è stanno anche nell'APK, quindi spazio buttato. In realtà, da Marshmallow in su, per un APK con una flag particolare nel manifest, e librerie conservate senza compressione, queste non vengono estratte, ma vedo ben poche app in giro che fanno così (ancora, memos.octt.eu.org/m/LBwtRWgGA5gbTVi8N97eXq). 📦️
Beh, in realtà si può risolvere qualcozina. Precisamente, avendo il root si può sia cambiare il comportamento di Android RunTime, che di default punta all'ottimizzazione delle prestazioni, ma può essere spinto alla #ottimizzazione dello spazio... sia inibire l'ottimizzazione per specifiche app. Le differenze in negativo che io ho notato con questa cosa sono sempre state minime, in realtà, però personalmente, avendo 64 GB e non 16 come un tempo, preferisco tenere le ottimizzazioni default per le app che uso giornalmente (o quasi), ma risparmiare spazio per quelle che tengo installate per "quando mi servono" (...che apro per davvero eh, ma solo qualche volta al mese o all'anno; ecco perché quando posso preferisco le webapp, ma non sempre posso). 🤭️
Ecco, ho testato e visto che basta cancellare la cartella oat
, e rimpiazzarla con un file (vuoto) dallo stesso nome, e pare Android non vada più a rigenerare i file ottimizzati per quella app, la farà invece sempre girare con l'interprete JIT (che ripeto, io 'sta differenza la vedo solo nell'avvio che dura 2-5 secondi in più). Facendo questo procedimento anche solo per la prima decina scarsa di app ordinate per peso della cartella, escluse quelle che uso di continuo, ho guadagnato circa 1 GB, che... non è tanto... ma, dato che non ho alcun vero svantaggio, è tanto. Ora, se volessi levare l'ottimizzazione per tutte le app, che non farò anche se mi farebbe guadagnare 1 altro GB quasi tondo... è più complicato, per questo lascio i link, ma in breve si setta la sysprop dalvik.vm.dex2oat-filter=space
, e le cartelle oat
non verranno mai più ricreate (ma non so se debbano essere cancellate a mano o no). 👻️
Purtroppo, per le librerie native una soluzione così bella non c'è... procuratevi APK con le librerie non compresse (ad esempio, Chromium da download-chromium.appspot.com le ha così), rompete le palle agli sviluppatori affinché buildino i loro APK nel modo giusto, o altrimenti riassemblatevi voi gli APK delle app più grosse che avete, se la situazione vi turba (io questo non lo farò, dovrei pure cambiare la firma sennò...). Insomma, ancora una volta Adrod è per chi vuole smanettare; chi vuole un telefono che funziona e basta se ne compri uno con KaiOS! 💖️