A partire dal livello API 8, puoi consentire l'installazione della tua applicazione sulla memoria esterna (ad esempio la scheda SD del dispositivo). Si tratta di una funzionalità facoltativa che puoi dichiarare
per la tua applicazione con l'attributo manifest android:installLocation. Se non dichiari questo attributo, la tua applicazione verrà installata solo nella memoria interna e non potrà essere spostata nella memoria esterna.
Per consentire al sistema di installare la tua applicazione nella memoria esterna, modifica il tuo
file manifest in modo da includere l'attributo android:installLocation nell'elemento <manifest> con un valore di "preferExternal" o "auto". Ad esempio:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" ... >
Se dichiari "preferExternal", richiedi che la tua applicazione venga installata nella memoria esterna, ma il sistema non garantisce che ciò avvenga. Se la memoria esterna è piena, il sistema la installerà nella memoria interna. L'utente può anche spostare l'applicazione tra le due posizioni.
Se dichiari "auto", indichi che la tua applicazione può essere installata nella memoria esterna, ma non hai una preferenza per la posizione di installazione. Il sistema deciderà dove installare l'applicazione in base a diversi fattori. L'utente può anche spostare l'applicazione tra le due posizioni.
Quando l'applicazione è installata nella memoria esterna:
- Non ha alcun effetto sulle prestazioni dell'applicazione, a condizione che la memoria esterna sia montata sul dispositivo.
- Il file
.apkviene salvato nella memoria esterna, ma tutti i dati utente privati, i database, i file.dexottimizzati e il codice nativo estratto vengono salvati nella memoria interna del dispositivo. - Il container univoco in cui è memorizzata l'applicazione viene criptato con una chiave generata in modo casuale che può essere decriptata solo dal dispositivo che l'ha installata originariamente. Pertanto, un'applicazione installata su una scheda SD funziona solo per un dispositivo.
- L'utente può spostare l'applicazione nella memoria interna tramite le impostazioni di sistema.
Avviso: quando l'utente attiva l'archiviazione di massa USB per condividere file con un computer o smonta la scheda SD tramite le impostazioni di sistema, la memoria esterna viene smontata dal dispositivo e tutte le applicazioni in esecuzione sulla memoria esterna vengono immediatamente chiuse.
Compatibilità con le versioni precedenti
La possibilità di installare l'applicazione nella memoria esterna è una funzionalità disponibile solo sui dispositivi con livello API 8 (Android 2.2) o versioni successive. Le applicazioni esistenti create prima del livello API 8 verranno sempre installate nella memoria interna e non potranno essere spostate nella memoria esterna (nemmeno sui dispositivi con livello API 8). Tuttavia, se la tua applicazione è progettata per supportare un livello API inferiore a 8, puoi scegliere di supportare questa funzionalità per i dispositivi con livello API 8 o versioni successive e rimanere comunque compatibile con i dispositivi che utilizzano un livello API inferiore a 8.
Per consentire l'installazione nella memoria esterna e rimanere compatibile con le versioni precedenti al livello API 8:
- Includi l'attributo
android:installLocationcon un valore di "auto" o "preferExternal" nell'elemento<manifest>. - Lascia l'attributo
android:minSdkVersioncosì com'è (un valore inferiore a "8") e assicurati che il codice dell'applicazione utilizzi solo le API compatibili con quel livello. - Per compilare l'applicazione, cambia la destinazione di compilazione in livello API 8. Questa operazione è necessaria perché le librerie Android precedenti non riconoscono l'attributo
android:installLocatione non compileranno l'applicazione quando è presente.
Quando l'applicazione viene installata su un dispositivo con un livello API inferiore a 8, l'attributo android:installLocation viene ignorato e l'applicazione viene installata nella memoria interna.
Attenzione: anche se il markup XML di questo tipo verrà ignorato dalle piattaforme precedenti, devi fare attenzione a non utilizzare le API di programmazione introdotte nel livello API 8 mentre minSdkVersion è inferiore a "8", a meno che tu non esegua il lavoro necessario per fornire la compatibilità con le versioni precedenti nel codice.
Applicazioni che NON devono essere installate nella memoria esterna
Quando l'utente attiva l'archiviazione di massa USB per condividere file con il computer (o smonta o rimuove la memoria esterna), qualsiasi applicazione installata nella memoria esterna e attualmente in esecuzione viene chiusa. Il sistema non riconosce l'applicazione finché l'archiviazione di massa non viene disattivata e la memoria esterna non viene rimontata sul dispositivo. Oltre a chiudere l'applicazione e a renderla non disponibile per l'utente, questa operazione può danneggiare in modo più grave alcuni tipi di applicazioni. Affinché la tua applicazione si comporti sempre come previsto, non devi consentire l'installazione dell'applicazione nella memoria esterna se utilizza una delle seguenti funzionalità, a causa delle conseguenze citate quando la memoria esterna viene smontata:
- Servizi
- Il
Servicein esecuzione viene chiuso e non viene riavviato quando la memoria esterna viene rimontata. Le applicazioni associate a questo servizio possono registrarsi per l'ACTION_EXTERNAL_APPLICATIONS_AVAILABLEintent di trasmissione, che notifica a tutte le applicazioni non installate nella memoria esterna quando le applicazioni installate nella memoria esterna sono di nuovo disponibili per il sistema. Dopo aver ricevuto questa trasmissione, le applicazioni possono tentare di associarsi al tuo servizio. - Servizi di allarme
- Le sveglie registrate con
AlarmManagerverranno annullate. Devi registrare di nuovo manualmente tutte le sveglie quando la memoria esterna viene rimontata. - Input Method Editor
- Il tuo IME verrà sostituito dall'IME predefinito. Quando la memoria esterna viene rimontata, l'utente può aprire le impostazioni di sistema per riattivare l'IME.
- Sfondi animati
- Lo sfondo animato in esecuzione Live Wallpaper verrà sostituito dallo sfondo animato predefinito. Quando la memoria esterna viene rimontata, l'utente può selezionare di nuovo lo sfondo animato.
- Widget di app
- Il widget dell'app verrà rimosso dalla schermata Home. Quando la memoria esterna viene rimontata, il widget dell'app non sarà disponibile per la selezione da parte dell'utente finché il sistema non reimposta l'applicazione Home (in genere non prima di un riavvio del sistema).
- Account Managers
- Gli account creati con
AccountManagerscompariranno finché la memoria esterna non verrà rimontata. - Adattatori di sincronizzazione
AbstractThreadedSyncAdaptere tutte le relative funzionalità di sincronizzazione non funzioneranno finché la memoria esterna non verrà rimontata.- Amministratori del dispositivo
DeviceAdminReceivere tutte le relative funzionalità di amministrazione verranno disattivate, il che può avere conseguenze imprevedibili per la funzionalità del dispositivo, che potrebbero persistere anche dopo il rimontaggio della memoria esterna.- Ricevitori di trasmissione in ascolto di "boot completato"
- Il sistema invia la trasmissione
ACTION_BOOT_COMPLETEDprima che la memoria esterna venga montata sul dispositivo. Se l'applicazione è installata nella memoria esterna, non potrà mai ricevere questa trasmissione.
Se la tua applicazione utilizza una delle funzionalità elencate sopra, non devi consentire l'installazione dell'applicazione nella memoria esterna. Per impostazione predefinita, il sistema non consentirà l'installazione dell'applicazione nella memoria esterna, quindi non devi preoccuparti delle applicazioni esistenti. Tuttavia, se sei certo che la tua applicazione non debba mai essere installata nella memoria
esterna, devi renderlo chiaro dichiarando android:installLocation con un valore di "internalOnly". Anche se questo non
modifica il comportamento predefinito, indica esplicitamente che l'applicazione deve essere installata solo
nella memoria interna e serve come promemoria per te e altri sviluppatori che questa decisione è stata
presa.
Applicazioni che devono essere installate nella memoria esterna
In parole semplici, tutto ciò che non utilizza le funzionalità elencate nella sezione precedente è sicuro se installato nella memoria esterna. I giochi di grandi dimensioni sono più comunemente i tipi di applicazioni che dovrebbero consentire l'installazione nella memoria esterna, perché in genere non forniscono servizi aggiuntivi quando sono inattivi. Quando la memoria esterna non è più disponibile e un processo di gioco viene chiuso, non dovrebbe esserci alcun effetto visibile quando la memoria torna disponibile e l'utente riavvia il gioco (supponendo che il gioco abbia salvato correttamente il suo stato durante il normale ciclo di vita dell'attività).
Se l'applicazione richiede diversi megabyte per il file APK, valuta attentamente se consentire l'installazione dell'applicazione nella memoria esterna in modo che gli utenti possano conservare spazio nella memoria interna.
Per ulteriori informazioni correlate, consulta: <manifest>