Località di installazione dell'app

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 .apk viene salvato nella memoria esterna, ma tutti i dati utente privati, i database, i file .dex ottimizzati 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:

  1. Includi l'attributo android:installLocation con un valore di "auto" o "preferExternal" nell'elemento <manifest>.
  2. Lascia l'attributo android:minSdkVersion così com'è (un valore inferiore a "8") e assicurati che il codice dell'applicazione utilizzi solo le API compatibili con quel livello.
  3. 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:installLocation e 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 Service in 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_AVAILABLE intent 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 AlarmManager verranno 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 AccountManager scompariranno finché la memoria esterna non verrà rimontata.
Adattatori di sincronizzazione
AbstractThreadedSyncAdapter e tutte le relative funzionalità di sincronizzazione non funzioneranno finché la memoria esterna non verrà rimontata.
Amministratori del dispositivo
DeviceAdminReceiver e 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_COMPLETED prima 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>