A partire dal livello API 8, puoi consentire l'installazione dell'applicazione
dispositivo di archiviazione esterno (ad esempio, la scheda SD del dispositivo). Questa è una funzionalità facoltativa
che puoi dichiarare
per la tua applicazione con l'attributo del file manifest android:installLocation
. Se sì
non dichiarare questo attributo, l'applicazione verrà installata nella memoria interna
e non può essere spostato nella memoria esterna.
Per consentire al sistema di installare l'applicazione sullo spazio di archiviazione esterno, modifica
file manifest per 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 l'installazione dell'applicazione sul
dispositivo di archiviazione esterno, ma il sistema non garantisce che l'applicazione verrà installata
dalla memoria esterna. Se la memoria esterna è piena, il sistema la installerà nella
archiviazione. L'utente può anche spostare l'applicazione tra le due posizioni.
Se dichiari "auto
", indichi che la tua applicazione potrebbe essere installata sul
ma non hai una preferenza relativa alla posizione di installazione. Il sistema
decidere dove installare l'applicazione in base a diversi fattori. L'utente può anche spostare
un'applicazione tra le due località.
Quando l'applicazione è installata nella memoria esterna:
- Per molto tempo non ci sono effetti sulle prestazioni dell'applicazione poiché la memoria esterna è montata sul dispositivo.
- Il file
.apk
viene salvato nella memoria esterna, ma tutti i dati utente privati, i file.dex
ottimizzati e il codice nativo estratto vengono salvati memoria interna del dispositivo. - Il container univoco in cui è archiviata la tua applicazione è criptato con una una chiave generata che può essere decriptata solo dal dispositivo che l'ha installata inizialmente. Di conseguenza, installata su una scheda SD funziona su un solo dispositivo.
- L'utente può spostare l'applicazione nella memoria interna tramite le impostazioni di sistema.
Avviso:quando l'utente abilita l'archiviazione di massa USB per la condivisione di 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 sullo spazio di archiviazione esterno verranno immediatamente terminate.
Compatibilità con le versioni precedenti
La possibilità di installare l'applicazione nella memoria esterna è una funzionalità disponibile soltanto su dispositivi con Livello API 8 (Android 2.2) o versioni successive. Applicazioni esistenti che sono state create in precedenza al livello API 8 verrà sempre installata nella memoria interna e non potrà essere spostata spazio di archiviazione (anche sui dispositivi con livello API 8). Tuttavia, se la tua applicazione è progettata per supportare una Con un livello API inferiore a 8, puoi scegliere di supportare questa funzionalità per i dispositivi con livello API 8 o superiore ed essere comunque compatibile con dispositivi che utilizzano un livello API inferiore a 8.
Consentire l'installazione su dispositivi di archiviazione esterni e rimanere compatibili con le versioni precedenti all'API. Livello 8:
- Includi l'attributo
android:installLocation
con il valore "auto
" o "preferExternal
" in<manifest>
. - Lascia invariato l'attributo
android:minSdkVersion
(qualcosa di minore) di "8") e assicurati che il codice dell'applicazione utilizzi solo API compatibili con questo livello. - Per compilare la tua applicazione, cambia il target della build in Livello API 8. Questo è
necessaria perché le librerie Android meno recenti non comprendono il codice
android:installLocation
e non compilerà la tua applicazione quando sarà presente.
Se 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 nell'ambiente
archiviazione.
Attenzione: anche se il markup XML come questo verrà ignorato dalla
piattaforme meno recenti, devi fare attenzione a non utilizzare le API di programmazione introdotte con il livello API 8
mentre minSdkVersion
è inferiore a "8", a meno che tu non esegua le operazioni necessarie per
per fornire la compatibilità con le versioni precedenti del codice.
Applicazioni che NON devono essere installate su dispositivi di archiviazione esterni
Quando l'utente consente all'archiviazione di massa USB di condividere file con il proprio computer (o in altro modo smonta o rimuove la memoria esterna), qualsiasi applicazione installato nella memoria esterna e attualmente in esecuzione è terminato. Il sistema diventa di fatto dell'applicazione finché non viene disattivata la memoria di massa e rimontato sul dispositivo. Oltre a terminare l'applicazione e a renderla non disponibile per l'utente, questo può interrompere alcuni tipi di applicazioni in modo più grave. Affinché la tua applicazione comportarsi costantemente come previsto, non devi consentire alla tua applicazione di installata sulla memoria esterna se utilizza una delle seguenti funzionalità, a causa dei Conseguenze quando la memoria esterna viene smontata:
- Servizi
- La tua corsa
Service
è e non viene riavviato quando l'unità di archiviazione esterna viene rimontata. Applicazioni associati a questo servizio possono registrarsiACTION_EXTERNAL_APPLICATIONS_AVAILABLE
per intent di trasmissione, che invia una notifica a tutte le applicazioni non installate sulla memoria esterna quando le applicazioni installate su server lo spazio di archiviazione è di nuovo disponibile per il sistema. Dopo aver ricevuto questo le applicazioni possono tentare di associarsi al tuo servizio. - Servizi di allarme
- Le sveglie registrate con
AlarmManager
verranno annullate. Devi registrare di nuovo manualmente eventuali allarmi quando l'unità di archiviazione esterna viene rimontata. - Motori del metodo di input
- 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
- Il tuo sfondo animato in esecuzione verrà sostituita dallo sfondo animato predefinito. Quando la memoria esterna viene rimontata, l'utente può seleziona di nuovo il tuo sfondo animato.
- Widget di app
- Il tuo widget dell'app verrà rimosso dalla schermata Home. Quando la memoria esterna viene rimontata, il widget dell'app non verrà disponibile per la selezione da parte dell'utente fino a quando il sistema non reimposta l'applicazione Home (solitamente non finché riavvio del sistema).
- Account manager
- I tuoi account creati con
AccountManager
scompariranno fino a quando l'unità di archiviazione esterna viene rimontata. - Adattatori per la sincronizzazione
- Il tuo
AbstractThreadedSyncAdapter
e tutte le sue funzionalità di sincronizzazione non funzionerà finché l'unità di archiviazione esterna non verrà rimontata. - Amministratori del dispositivo
- Il tuo
DeviceAdminReceiver
e tutte le sue funzionalità di amministratore la disattivazione, il che può avere conseguenze imprevedibili per la funzionalità del dispositivo, rimangono dopo il rimontaggio della memoria esterna. - Ricevitori di trasmissioni in ascolto di "Avvio completato"
- Il sistema invia la trasmissione
ACTION_BOOT_COMPLETED
prima di montare la memoria esterna sul dispositivo. Se la tua applicazione è installata sul dall'unità di archiviazione esterna, non potrà mai ricevere questo broadcast.
Se la tua applicazione utilizza una qualsiasi delle funzionalità sopra elencate, non devi consentire
installare l'applicazione su una memoria esterna. Per impostazione predefinita, il sistema non consentirà
da installare sullo spazio di archiviazione esterno, così non devi preoccuparti della tua
diverse applicazioni. Tuttavia, se hai la certezza che la tua applicazione non deve mai essere installata sul
unità di archiviazione esterna, dovresti chiarire questo aspetto dichiarando android:installLocation
con il valore "internalOnly
". Anche se questo non
cambiare il comportamento predefinito, dichiara esplicitamente che l'applicazione deve essere installata
sulla memoria interna e serve a ricordare a te e agli altri sviluppatori che questa decisione ha
un'applicazione.
Applicazioni che devono essere installate su unità di archiviazione esterna
In parole semplici, tutto ciò che non utilizza le funzionalità elencate nella sezione precedente sono sicuri se installati su una memoria esterna. I giochi di grandi dimensioni sono più comunemente di applicazioni che dovrebbero consentire l'installazione su dispositivi di archiviazione esterni, in quanto i giochi in genere non forniscono servizi aggiuntivi in caso di inattività. Quando l'unità di archiviazione esterna non è più disponibile e un gioco non dovrebbe più essere visibile quando lo spazio di archiviazione sarà di nuovo disponibile l'utente riavvia il gioco (supponendo che il gioco abbia salvato correttamente il suo stato durante il normale Ciclo di vita dell'attività).
Se la tua applicazione richiede diversi megabyte per il file APK, devi valutare attentamente se consentire l'installazione dell'applicazione sullo spazio di archiviazione esterno in modo che gli utenti possono conservare spazio nella memoria interna.
Per ulteriori informazioni correlate, consulta: <manifest>