Önceden Kurulmuş Sistem Paketleri

Android, tek bir cihazda birden fazla kullanıcıya sahip olmayı destekler. Daha fazla bilgi edinmek için bkz. Birden Fazla Kullanıcıyı Destekleme . Tüm sistem paketleri her türden Android kullanıcısı için yararlı olmadığından, her bir kullanıcı türüne hangi sistem paketlerinin önceden yüklenmesi gerektiğini belirlemek için bir izin verilenler listesi kullanabilirsiniz. Gereksiz sistem paketlerini önceden kurmayarak kullanıcı oluşturma sürelerini, başlangıç ​​zamanlarını ve bellek kullanımını optimize edebilirsiniz.

Kullanıcı türlerine göre yeni kullanıcılar için başlangıçta hangi sistem paketlerinin yüklenmesi gerektiğini bildirmek için frameworks/base/data/etc/preinstalled-packages-platform.xml göre modellenen sistem yapılandırma XML dosyalarını kullanın. Cihazdaki tüm sistem paketlerinin, karşılık gelen yer paylaşımı hedef paketinin girişine göre otomatik olarak işlenen statik yer paylaşımları hariç, ideal olarak bir XML dosyasında (bildirim adıyla anahtarlanmış) bir girişi olmalıdır. Cihazın burada listelenmeyen sistem paketlerini işleme şekli , yapılandırma modu tarafından kontrol edilir.

Kullanıcı türleri

Temel kullanıcı türleri (her kullanıcı bu türlerden en az biri olacaktır):

Kullanıcı tipi Tanım
SYSTEM Kullanıcı 0.
FULL Profil dışı herhangi bir insan kullanıcı.
PROFILE Bir profil insan kullanıcısı.

Her birinin kesin anlamı frameworks/base/core/java/android/content/pm/UserInfo.java dosyasında tanımlanmıştır.

Her kullanıcı frameworks/base/core/java/android/os/UserManager.java tanımlanan AOSP kullanıcı türlerini ve herhangi bir OEM özel kullanıcısını içeren bu kullanıcı türlerinden tam olarak biri olduğundan, bireysel kullanıcı türleri belirtilerek daha ayrıntılı kontrol elde edilebilir. frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. Daha fazla bilgi için kullanıcı türleri sayfasına bakın. Şu anda AOSP kullanıcı türleri şunları içerir:

  • 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

Örnekler

Aşağıdaki örnekler en yaygın kullanım durumlarını ele almaktadır:

  1. Yalnızca kullanıcı 0'a önceden kurulacak bir sistem paketi için:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
    
  2. Bir sistem paketinin tüm insan kullanıcılara (web tarayıcısı gibi) önceden kurulması, yani tüm insan kullanıcılara hitap eden FULL veya PROFILE türündeki herhangi bir kullanıcıya kurulması için:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
    
  3. Profil kullanıcıları dışındaki tüm insan kullanıcılara bir sistem paketinin önceden kurulması. Örneğin, bu bir duvar kağıdı uygulamasına uygulanabilir:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
    </install-in-user-type>
    
  4. Bazı sistem paketlerinin türü ne olursa olsun tüm kullanıcılarda olması gerekir. Bu durumlarda şunu kullanın:
    <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. Bireysel kullanıcı türlerinin belirtilmesiyle daha ayrıntılı seçenekler de mevcuttur. Örneğin, aşağıdaki örnek kod, bu paketi, kullanıcı türü yönetilen profil veya konuk olan ya da SYSTEM temel türünden olan herhangi bir kullanıcıya yükler.
    <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>
    

yüklemeyin etiketi

Paketlerin belirli kullanıcı türlerine önceden yüklenmesi do-not-install-in kullanılarak da engellenebilir. do-not-install-in herhangi bir dosyadaki install-in etiketlerini geçersiz kıldığını unutmayın. Örneğin:

<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>
Bir kullanıcı android.os.usertype.full.GUEST (FULL'un bir alt türü) türündeyse, do-not-install-in etiketi install-in öncelikli olduğundan bu paket yüklenmeyecektir .

Davranışı config.xml ile kontrol etme

Yapılandırma kaynak değeri config_userTypePackageWhitelistMode bu özelliği denetler ve bir aygıtın herhangi bir kullanıcı türü için girişi olmayan sistem paketlerini nasıl yorumlayacağını belirler. Daha fazla bilgi için bkz. frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode .

frameworks/base/core/res/res/values/config.xml dosyasında config_userTypePackageWhitelistMode adlı tamsayıyı aşağıdaki değerlerin birleşimine ayarlayın. Bu bayraklar birleştirilebilir. En önemli bayraklar şunlardır:

Değer Tanım
0 (0b0000) Devre dışı bırakmak. Tüm sistem paketlerini yükleyin.
1 (0b0001) Yürüt. Sistem paketlerini yalnızca izin verilenler listesine eklendiğinde yükleyin.
4 (0b0100) İzin verilenler listesi dosyasında belirtilmeyen tüm paketleri örtülü olarak izin verilenler listesine eklenmiş olarak kabul edin.
8 (0b1000) İzin verilenler listesi dosyasında belirtilmeyen herhangi bir paketi yalnızca SYSTEM kullanıcısı için örtülü olarak izin verilenler listesine eklenmiş olarak kabul edin.

Aşağıdaki yapılandırma özelliği etkinleştirecek (böylece install-in ve do-not-install-in etiketlerine uyulacak) ancak belirtilmeyen tüm sistem paketlerine tüm kullanıcılar için install-in gibi davranacaktır:

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