Pacchetti di sistema preinstallati

Android supporta più utenti su un singolo dispositivo. Per ulteriori informazioni, vedere Supporto di più utenti . Poiché non tutti i pacchetti di sistema sono utili su tutti i tipi di utenti Android, puoi utilizzare una lista consentita per specificare quali pacchetti di sistema devono essere preinstallati su ciascun tipo di utente. Non preinstallando pacchetti di sistema non necessari, è possibile ottimizzare i tempi di creazione degli utenti, i tempi di avvio e l'utilizzo della memoria.

Utilizzare file XML di configurazione del sistema, modellati su frameworks/base/data/etc/preinstalled-packages-platform.xml , per dichiarare quali pacchetti di sistema devono essere inizialmente installati per i nuovi utenti in base al tipo di utente. Tutti i pacchetti di sistema sul dispositivo dovrebbero idealmente avere una voce in un file XML (con chiave in base al nome manifest), ad eccezione degli overlay statici, che vengono invece trattati automaticamente in base alla voce per il pacchetto di destinazione overlay corrispondente. Il modo in cui il dispositivo deve gestire i pacchetti di sistema che non sono elencati qui è controllato dalla modalità di configurazione .

Tipi di utenti

I tipi di utente di base (ogni utente sarà almeno uno di questi tipi) sono:

Tipologia di utente Descrizione
SYSTEM Utente 0.
FULL Qualsiasi utente umano senza profilo.
PROFILE Un utente umano del profilo.

Il significato preciso 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 di utente, che include i tipi di utente AOSP definiti in frameworks/base/core/java/android/os/UserManager.java e qualsiasi utente personalizzato OEM tipi definiti in frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. Consulta la pagina dei tipi di utente per ulteriori informazioni. Attualmente, i tipi di utenti 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

Gli esempi seguenti riguardano i casi d'uso più comuni:

  1. Per un pacchetto di sistema da preinstallare solo nell'utente 0:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
    
  2. Per un pacchetto di sistema da preinstallare su tutti gli utenti umani (come un browser Web), ovvero da installare su qualsiasi utente di tipo FULL o PROFILE , 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>
    
  3. Per un pacchetto di sistema da preinstallare su tutti gli utenti umani ad eccezione degli utenti del profilo. Ad esempio, questo potrebbe essere applicato a un'app per sfondi:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
    </install-in-user-type>
    
  4. È necessario che alcuni pacchetti di sistema siano presenti su tutti gli utenti, indipendentemente dal tipo. In questi casi, utilizzare:
    <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>
    
  5. Sono disponibili anche opzioni più granulari specificando i singoli tipi di utente. Ad esempio, il seguente codice di esempio installa questo pacchetto su qualsiasi utente il cui tipo di utente è un profilo gestito o un guest oppure è di tipo base SYSTEM .
    <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 "non installare".

È inoltre possibile impedire che i pacchetti vengano preinstallati su particolari 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. Per 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>
Se un utente è di tipo android.os.usertype.full.GUEST (un sottotipo di FULL), questo pacchetto non verrà installato perché il tag do-not-install-in ha la precedenza su install-in .

Controllo del comportamento con config.xml

Il valore della risorsa di configurazione config_userTypePackageWhitelistMode controlla questa funzionalità e determina il modo in cui un dispositivo interpreta i pacchetti di sistema che non dispongono di voci per alcun tipo di utente. Per ulteriori informazioni, vedere frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode .

In frameworks/base/core/res/res/values/config.xml , imposta il numero intero denominato config_userTypePackageWhitelistMode su una combinazione dei seguenti valori. Questi flag possono essere combinati. Le bandiere più importanti sono:

Valore Descrizione
0 (0b0000) Disattivare. Installa tutti i pacchetti di sistema.
1 (0b0001) Imporre. Installa i pacchetti di sistema solo se inseriti nella lista consentita.
4 (0b0100) Considera qualsiasi pacchetto non menzionato nel file della lista consentita come implicitamente inserito nella lista consentita.
8 (0b1000) Considera qualsiasi pacchetto non menzionato nel file della lista consentita come implicitamente inserito nella lista consentita solo per l'utente SYSTEM.

La seguente configurazione abiliterà la funzionalità (in modo che i tag install-in e do-not-install-in vengano rispettati) ma tratterà tutti i pacchetti di sistema non menzionati come se fossero install-in per tutti gli utenti:

<integer name="config_userTypePackageWhitelistMode">5</integer>