Se hai mai provato a gestire file su un dispositivo Android, probabilmente hai notato che le cose funzionano in modo diverso a seconda della versione di Android che utilizzi. A partire da Android 10, Google ha introdotto un cambiamento fondamentale nel modo in cui le app interagiscono con il file system. Questo cambiamento, noto come Archiviazione con ambito, ha ridefinito le regole relative alla lettura e alla scrittura di file sullo spazio di archiviazione condiviso. Per gli utenti che eseguono il sideload di app, gestiscono file OBB o lavorano con file manager, comprendere l'archiviazione con ambito è essenziale.
In questo articolo esploreremo cos'è l'archiviazione con ambito, perché Google l'ha implementata, come influisce sugli utenti e sugli sviluppatori di tutti i giorni e cosa significa per chiunque installi file APK o XAPK al di fuori del Play Store.
Il problema con il vecchio modello di archiviazione
Prima di Android 10, qualsiasi app che richiedesse l'autorizzazione READ_EXTERNAL_STORAGE o WRITE_EXTERNAL_STORAGE poteva accedere praticamente a qualsiasi file nella memoria condivisa del dispositivo. Ciò includeva foto, documenti, download e persino file creati da altre app. Sebbene ciò rendesse conveniente la gestione dei file, creava seri problemi di privacy e sicurezza.
Considera una semplice app torcia. Nel vecchio modello, se gli concedevi il permesso di archiviazione, poteva leggere silenziosamente le tue foto, scansionare i tuoi documenti scaricati o persino modificare file appartenenti ad altre applicazioni. Non c'era alcun controllo granulare. Hai concesso a un'app l'accesso completo all'intero spazio di archiviazione o l'hai negato completamente.
Questo ampio accesso ha portato a problemi nel mondo reale. Alcune app hanno raccolto i dati degli utenti scansionando lo spazio di archiviazione alla ricerca di file sensibili. Altri hanno lasciato file orfani che ingombravano il dispositivo per molto tempo dopo la disinstallazione dell'app. Google aveva bisogno di una soluzione che bilanciasse usabilità e privacy e l'archiviazione con ambito era la loro risposta.
Cosa fa effettivamente l'archiviazione con ambito
L'archiviazione con ambito modifica radicalmente la relazione tra le app e il file system. Con questo modello, ogni app ottiene la propria sandbox privata su una memoria esterna, in genere situata in /Android/data/[package.name]/. Le app possono leggere e scrivere liberamente all'interno della propria sandbox senza bisogno di alcuna autorizzazione.
Tuttavia, l'accesso ai file al di fuori di questa sandbox richiede il passaggio attraverso API controllate. Ecco come funziona il nuovo modello:
Archiviazione specifica per l'app
Ogni app ha una directory dedicata a cui solo lei può accedere. Quando l'app viene disinstallata, questa directory viene automaticamente ripulita. Nessun'altra app può leggere o scrivere in questa posizione senza accesso root. Ciò elimina il problema dei file orfani e impedisce lo snooping dei dati tra app.
Collezioni multimediali
Per i contenuti multimediali condivisi come foto, video e file audio, Android fornisce l'API MediaStore. Le app possono contribuire con contenuti multimediali a raccolte condivise e leggere contenuti multimediali creati da altre app, ma solo tramite questa interfaccia strutturata. Un'app può visualizzare i propri contenuti multimediali senza alcuna autorizzazione, ma l'accesso ai contenuti multimediali di altre app richiede le autorizzazioni READ_MEDIA_IMAGES, READ_MEDIA_VIDEO o READ_MEDIA_AUDIO introdotte in Android 13.
Quadro di accesso all'archiviazione
Per documenti e altri file non multimediali, le app devono utilizzare Storage Access Framework (SAF). Questo presenta un selettore di file di sistema all'utente, che sceglie esplicitamente a quali file o directory può accedere l'app. L'app non ottiene mai l'accesso completo all'intero file system.
L'autorizzazione MANAGE_EXTERNAL_STORAGE
Per le app che necessitano realmente di un ampio accesso ai file, come file manager, strumenti di backup e software antivirus, Android fornisce l'autorizzazione MANAGE_EXTERNAL_STORAGE. Tuttavia, questa autorizzazione richiede un'approvazione speciale da parte di Google per le app distribuite tramite il Play Store e gli utenti devono concederla manualmente tramite le impostazioni di sistema anziché una semplice finestra di dialogo.
La cronologia del lancio
Google non ha applicato l'archiviazione con ambito dall'oggi al domani. La transizione è avvenuta gradualmente:
- È stato introdotto lo spazio di archiviazione con ambito Android 10 (API29):, ma le app potevano disattivare l'utilizzo di requestLegacyExternalStorage="true" nel manifest. Ciò ha dato agli sviluppatori il tempo di adattarsi.
- Android 11 (API30): Il flag legacy è stato ignorato per le app destinate all'API 30 o successiva. L'archiviazione con ambito è diventata obbligatoria per le app nuove e aggiornate sul Play Store.
- Android 12 e versioni successive: Sono stati apportati ulteriori perfezionamenti, tra cui autorizzazioni granulari per i media e prestazioni SAF migliorate.
- Android 13 (API 33): L'ampia autorizzazione READ_EXTERNAL_STORAGE è stata deprecata a favore di autorizzazioni multimediali specifiche.
- Android 14 (API 34): È stato introdotto l'accesso parziale a foto e video, consentendo agli utenti di concedere l'accesso a file specifici anziché a intere librerie multimediali.
In che modo l'archiviazione con ambito influisce sul sideload
Per gli utenti che installano app dall'esterno del Play Store, l'archiviazione con ambito introduce alcune sfide pratiche che vale la pena comprendere.
Download e accesso ai file APK
Quando scarichi un file APK tramite un browser, in genere arriva nella cartella Download. Nell'archiviazione con ambito, l'app browser possiede quel file. Se desideri installarlo utilizzando un'app diversa, ad esempio un file manager, tale file manager necessita dell'accesso appropriato. La maggior parte dei file manager moderni lo gestiscono correttamente tramite SAF, ma quelli più vecchi potrebbero avere difficoltà.
Il programma di installazione del pacchetto di sistema può comunque accedere ai file selezionati esplicitamente tramite il selettore file, quindi il flusso di base di download e installazione di un APK funziona ancora. Tuttavia, i flussi di lavoro di installazione automatizzata che si basavano sull'accesso diretto al percorso dei file potrebbero interrompersi.
File OBB e dati di gioco
È qui che lo storage con ambito crea il maggior attrito per i sideloader. Molti giochi di grandi dimensioni utilizzano file OBB (Opaque Binary Blob) archiviati in /Android/obb/[package.name]/. Con il vecchio modello, potevi semplicemente copiare i file OBB nella directory corretta utilizzando qualsiasi file manager.
Con l'archiviazione con ambito, la directory /Android/obb/ è limitata. Su Android 11 e versioni successive, le app normali non possono scrivere nella directory OBB di un'altra app. Ciò significa che se scarichi un file XAPK che contiene dati OBB, il programma di installazione necessita di una gestione speciale per posizionare correttamente tali file.
Strumenti come il nostro Estrattore OBB possono aiutarti a estrarre file OBB dai pacchetti XAPK, ma per inserirli nella directory corretta nelle versioni Android più recenti potrebbe essere necessario utilizzare un file manager con autorizzazione MANAGE_EXTERNAL_STORAGE o utilizzare comandi ADB da un computer.
Considerazioni sull'installazione di XAPK
I file XAPK raggruppano un APK insieme ai dati OBB e talvolta dividono le configurazioni APK. L'installazione di questi dispositivi su dispositivi con Android 11 o versioni successive richiede un programma di installazione che comprenda le restrizioni di archiviazione con ambito. Il programma di installazione deve possedere l'autorizzazione MANAGE_EXTERNAL_STORAGE o utilizzare le API appropriate per posizionare i file OBB nella posizione corretta.
Questo è uno dei motivi per cui può essere utile convertire i file XAPK nel formato APK standard. Un APK autonomo non richiede il posizionamento di file OBB, semplificando il processo di installazione sulle versioni Android più recenti. Puoi utilizzare il nostro Convertitore da XAPK a APK per estrarre l'APK di base da un pacchetto XAPK.
Cosa devono sapere gli sviluppatori
Se stai sviluppando app Android, l'archiviazione con ambito richiede di riconsiderare il modo in cui gestisci i file:
- Utilizza directory specifiche dell'app per tutti i file necessari solo alla tua app. Questi non richiedono autorizzazioni e vengono automaticamente ripuliti al momento della disinstallazione.
- Utilizza MediaStore per foto, video e audio che dovrebbero essere visibili ad altre app e sopravvivere alla disinstallazione.
- Usa SAF quando la tua app deve funzionare con documenti o directory selezionati dall'utente.
- Evitare percorsi di file codificati. Percorsi come /sdcard/MyApp/ non sono più affidabili. Utilizzare invece Context.getExternalFilesDir().
- Il comportamento di Test su più livelli API. differisce in modo significativo tra Android 10, 11, 13 e 14.
Strategie di migrazione
Se la tua app ha precedentemente archiviato file in uno spazio di archiviazione condiviso, è necessario un piano di migrazione. L'approccio consigliato consiste nel copiare i file esistenti nell'archivio specifico dell'app al primo avvio dopo l'aggiornamento, quindi eliminare le vecchie copie. Utilizza Environment.getExternalStorageDirectory() con il flag legacy durante il periodo di transizione per leggere i vecchi file, quindi spostali nella nuova posizione.
Idee sbagliate comuni
"L'archiviazione con ambito significa che le app non possono accedere ad alcun file"
Questo è falso. Le app possono comunque accedere liberamente ai propri file, contribuire a raccolte multimediali condivise e richiedere l'accesso a file specifici tramite il selettore di sistema. Ciò che è cambiato è che le app non possono più esplorare silenziosamente l'intero file system.
"I file manager non funzionano nelle nuove versioni di Android"
I file manager che richiedono MANAGE_EXTERNAL_STORAGE funzionano ancora. L'utente deve solo concedere questa autorizzazione speciale tramite le impostazioni. I file manager più diffusi si sono già adattati a questa esigenza.
"L'archiviazione con ambito influisce solo sulla scheda SD"
L'archiviazione con ambito si applica a tutta l'archiviazione condivisa, inclusa l'archiviazione condivisa interna. Il termine "archiviazione esterna" in Android si riferisce allo spazio di archiviazione condiviso accessibile a più app, non necessariamente a una scheda SD fisica.
Consigli pratici per gli utenti
Se esegui regolarmente il sideload di app o gestisci file sul tuo dispositivo Android, ecco alcuni consigli pratici:
- Utilizza un file manager moderno che supporta MANAGE_EXTERNAL_STORAGE. App come Solid Explorer, MiXplorer e Total Commander si sono adattate bene all'archiviazione con ambito.
- Concedi attentamente le autorizzazioni. Quando un file manager richiede "Accesso a tutti i file", tieni presente che questa è l'autorizzazione MANAGE_EXTERNAL_STORAGE ed è necessaria per la piena funzionalità.
- Utilizza ADB per operazioni ostinate sui file. Se non è possibile inserire file OBB tramite un file manager, collegando il dispositivo a un computer e utilizzando adb push si ignorano completamente le restrizioni di archiviazione mirate.
- Converti pacchetti complessi in formati più semplici. Se un file XAPK ti dà problemi su un dispositivo più recente, estrarre solo il componente APK potrebbe essere il percorso di minor resistenza.
- Mantieni aggiornate le tue app di installazione. Le versioni precedenti dei programmi di installazione XAPK potrebbero non gestire correttamente l'archiviazione con ambito.
Il futuro dell'archiviazione Android
Google continua a perfezionare il modello di archiviazione con ogni versione di Android. Android 14 ha introdotto l'accesso multimediale parziale, consentendo agli utenti di condividere foto specifiche con un'app anziché con l'intera libreria. Si prevede che Android 15 apporterà ulteriori miglioramenti alle prestazioni e all'usabilità di Storage Access Framework.
La tendenza è chiara: Android si sta muovendo verso un modello in cui gli utenti hanno un controllo capillare su ciò che ciascuna app può vedere e modificare. Sebbene ciò crei qualche attrito per gli utenti esperti e i sideloader, migliora significativamente la privacy e la sicurezza per una base di utenti più ampia.
Utilizzo dell'archiviazione con ambito senza interrompere i dati dell'app
L'archiviazione con ambito rappresenta uno dei cambiamenti più significativi apportati all'architettura di Android negli ultimi anni. Limitando le app ai propri sandbox e richiedendo il consenso esplicito dell'utente per un accesso più ampio, Google ha migliorato notevolmente la posizione sulla privacy della piattaforma. Per gli utenti che eseguono il sideload delle app e gestiscono i file manualmente, comprendere queste restrizioni aiuta a aggirare i punti di attrito occasionali. E per gli sviluppatori, l’adattamento allo storage con ambito non è facoltativo ma piuttosto un requisito fondamentale per il moderno sviluppo Android.
L'installazione di APK, l'inserimento di file OBB e la semplice gestione quotidiana dello spazio di archiviazione vengono eseguiti tutti nello stesso sistema: archiviazione con ambito. Una volta compreso come funziona, sarai tu ad avere il controllo del tuo dispositivo, invece di essere alla mercé di app che potrebbero abusare di un ampio accesso ai file.