Località di installazione dell'app

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:

  1. Includi l'attributo android:installLocation con il valore "auto" o "preferExternal" in <manifest> .
  2. 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.
  3. 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 registrarsi ACTION_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>