Android supporta l'utilizzo di più utenti su un unico dispositivo. Per saperne di più, consulta Supporto di più utenti. Poiché non tutti i pacchetti di sistema sono utili per tutti i tipi di utenti Android, puoi utilizzare una lista consentita per specificare quali pacchetti di sistema devono essere preinstallati per ciascun tipo di utente. Evitando di preinstallare i pacchetti di sistema non necessari, possono ottimizzare i tempi di creazione degli utenti, l'ora di inizio e l'utilizzo della memoria.
Utilizza i file XML di configurazione di sistema, basati su
frameworks/base/data/etc/preinstalled-packages-platform.xml
,
per dichiarare quali pacchetti di sistema devono essere installati inizialmente per i nuovi utenti
in base al loro tipo di utente. Idealmente, tutti i pacchetti di sistema sul dispositivo dovrebbero avere una voce in un file XML (in base al nome del manifest), ad eccezione degli overlay statici, che vengono invece trattati automaticamente in base alla voce del pacchetto di destinazione dell'overlay corrispondente.
Il modo in cui il dispositivo
deve gestire i pacchetti di sistema non elencati qui, è controllato
modalità di configurazione.
Tipi di utenti
I tipi di utenti di base (ogni utente è almeno uno di questi tipi) sono:
Tipo di utente | Descrizione |
---|---|
SYSTEM |
Utente 0. |
FULL |
Qualsiasi utente umano non appartenente a un profilo. |
PROFILE |
Un utente umano di profilo. |
Il significato esatto di ciascuno è definito in
frameworks/base/core/java/android/content/pm/UserInfo.java
.
È possibile ottenere un controllo più granulare specificando i singoli tipi di utente, poiché ogni utente è esattamente uno di questi tipi, inclusi i tipi di utente AOSP definiti in frameworks/base/core/java/android/os/UserManager.java
e gli eventuali tipi di utente personalizzati OEM definiti in frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.
. Per ulteriori informazioni, consulta la pagina Tipi di utente.
Attualmente, i tipi di utente AOSP includono:
android.os.usertype.full.SYSTEM
android.os.usertype.full.SECONDARY
android.os.usertype.full.GUEST
android.os.usertype.full.DEMO
android.os.usertype.full.RESTRICTED
android.os.usertype.profile.MANAGED
android.os.usertype.system.HEADLESS
Esempi
I seguenti esempi riguardano i casi d'uso più comuni:
- Per preinstallare un pacchetto di sistema solo nell'utente 0:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM" /> </install-in-user-type>
- Per preinstallare un pacchetto di sistema su tutti gli utenti (come un browser web),
ovvero da installare su qualsiasi utente di tipo
FULL
oPROFILE
, che si rivolge a tutti gli utenti umani:<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- Per un pacchetto di sistema preinstallato su tutti gli utenti, ad eccezione degli utenti del profilo.
Ad esempio, potrebbe essere applicato a un'app di sfondi:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> </install-in-user-type>
- Alcuni pacchetti di sistema devono essere installati su tutti gli utenti, indipendentemente dal tipo. In questi casi, utilizza:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- Sono disponibili anche opzioni più granulari specificando i singoli tipi di utenti. Il seguente codice campione, ad esempio, installa questo pacchetto su qualsiasi
il cui tipo di utente è un profilo gestito o un ospite o è di
SYSTEM
tipo di base.<install-in-user-type package="com.android.example"> <install-in user-type="android.os.usertype.profile.MANAGED" /> <install-in user-type="android.os.usertype.full.GUEST" /> <install-in user-type="SYSTEM"> </install-in-user-type>
tag do-not-install-in
È anche possibile impedire la preinstallazione dei pacchetti su determinati tipi di utenti utilizzando il tag do-not-install-in
. Tieni presente che i tag do-not-install-in
sovrascrivono i tag install-in
in qualsiasi file. Ad esempio:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <do-not-install-in user-type="android.os.usertype.full.GUEST"/> </install-in-user-type>
android.os.usertype.full.GUEST
(un sottotipo di FULL),
questo pacchetto non viene installato perché il tag do-not-install-in
ha la precedenza su install-in
.
Controlla il comportamento con config.xml
Il valore della risorsa di configurazione config_userTypePackageWhitelistMode
controlla questa funzionalità e determina in che modo un dispositivo interpreta i pacchetti di sistema
che non hanno voci per nessun tipo di utente. Per ulteriori informazioni, consulta
frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode
.
In frameworks/base/core/res/res/values/config.xml
, imposta l'intero
denominato config_userTypePackageWhitelistMode
su una combinazione di
i seguenti valori. Questi flag possono essere combinati. Le segnalazioni più importanti sono:
Valore | Descrizione |
---|---|
0 (0b0000) |
Disattiva. Installa tutti i pacchetti di sistema. |
1 (0b0001) |
Applica. Installa i pacchetti di sistema solo se inseriti nella lista consentita. |
4 (0b0100) |
Tieni presente che i pacchetti non menzionati nel file della lista consentita come implicitamente inseriti nella lista consentita. |
8 (0b1000) |
Considera qualsiasi pacchetto non menzionato nel file della lista consentita come implicitamente incluso solo per l'utente SYSTEM. |
La seguente configurazione abilita la funzionalità (in modo che install-in
e
i tag do-not-install-in
vengono obbediti), ma tratta tutti quelli non menzionati
pacchetti di sistema come se fossero install-in
per tutti gli utenti:
<integer name="config_userTypePackageWhitelistMode">5</integer>