Önceden yüklenmiş sistem paketleri

Android, tek bir cihazda birden fazla kullanıcı olmasını destekler. Daha fazla bilgi için Birden fazla kullanıcıyı destekleme başlıklı makaleyi inceleyin. Tüm sistem paketleri her tür Android kullanıcısı için yararlı olmadığından, her kullanıcı türüne hangi sistem paketlerinin önceden yüklenmesi gerektiğini belirtmek için izin verilenler listesini kullanabilirsiniz. Gereksiz sistem paketlerini önceden yüklemeyerek kullanıcı oluşturma sürelerini, başlangıç sürelerini ve bellek kullanımını optimize edebilirsiniz.

Yeni kullanıcılar için kullanıcı türlerine göre hangi sistem paketlerinin ilk olarak yüklenmesi gerektiğini belirtmek üzere frameworks/base/data/etc/preinstalled-packages-platform.xml modelinde oluşturulmuş sistem yapılandırma XML dosyalarını kullanın. Cihazdaki tüm sistem paketlerinin ideal olarak bir XML dosyasında girişi olmalıdır (manifest adına göre anahtarlanır). Bunun yerine, statik yer paylaşımları, ilgili yer paylaşımı hedef paketinin girişine göre otomatik olarak işlenir. 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 birine sahiptir) şunlardır:

Kullanıcı türü Açıklama
SYSTEM 0. Kullanıcı
FULL Profil olmayan gerçek kullanıcılar.
PROFILE Gerçek bir kullanıcının profili.

Her birinin tam anlamı frameworks/base/core/java/android/content/pm/UserInfo.java adresinde tanımlanmıştır.

Her kullanıcı tam olarak bu kullanıcı türlerinden biri olduğundan (frameworks/base/core/java/android/os/UserManager.java bölümünde tanımlanan AOSP kullanıcı türleri ve frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. bölümünde tanımlanan tüm OEM özel kullanıcı türleri dahil) kullanıcı türlerini tek tek belirterek daha ayrıntılı kontrol elde edilebilir. Daha fazla bilgi için kullanıcı türleri sayfasına bakın. AOSP kullanıcı türleri şu anda şunlardır:

  • 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.profile.PRIVATE
  • android.os.usertype.system.HEADLESS

Örnekler

Aşağıdaki örneklerde en yaygın kullanım alanları ele alınmıştır:

  1. Bir sistem paketinin yalnızca 0 numaralı kullanıcıya önceden yüklenmesi 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 gerçek kullanıcılara (ör. web tarayıcısı) önceden yüklenmesi, yani tüm gerçek kullanıcıları hedefleyen FULL veya PROFILE türündeki herhangi bir kullanıcıya yüklenmesi 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. Bir sistem paketinin, profil kullanıcıları hariç tüm gerçek kullanıcılara önceden yüklenmesi için. Ö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ürden bağımsız olarak tüm kullanıcılarda bulunması gerçekten gereklidir. Bu durumlarda şunları 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. Ayrı kullanıcı türleri belirterek daha ayrıntılı seçeneklerden de yararlanabilirsiniz. Örneğin, aşağıdaki örnek kod bu paketi kullanıcı türü yönetilen profil veya misafir olan ya da SYSTEM temel türüne sahip olan tüm kullanıcılara 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>

do-not-install-in etiketi

do-not-install-in etiketi kullanılarak paketlerin belirli kullanıcı türlerine önceden yüklenmesi de engellenebilir. do-not-install-in etiketlerinin, herhangi bir dosyada install-in etiketlerinin geçersiz kılacağını unutmayın. Örnek:

<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 türüne (FULL alt türü) sahipse do-not-install-in etiketi install-in'ten öncelikli olduğundan bu paket yüklenmez.

Davranışı config.xml ile kontrol etme

config_userTypePackageWhitelistMode yapılandırma kaynağı değeri bu özelliği kontrol eder ve cihazın, herhangi bir kullanıcı türü için girişi olmayan sistem paketlerini nasıl yorumlayacağını belirler. Daha fazla bilgi için frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode başlıklı makaleyi inceleyin.

frameworks/base/core/res/res/values/config.xml içinde, config_userTypePackageWhitelistMode adlı tam sayıyı aşağıdaki değerlerin bir kombinasyonuna ayarlayın. Bu işaretler birleştirilebilir. En önemli işaretler şunlardır:

Değer Açıklama
0 (0b0000) Devre dışı bırakın. Tüm sistem paketlerini yükleyin.
1 (0b0001) Zorunlu kıl'ı tıklayın. Sistem paketlerini yalnızca izin verilenler listesine eklendiklerinde yükleyin.
4 (0b0100) İzin verilenler listesi dosyasında belirtilmeyen tüm paketler, izin verilenler listesine dahil edilmiş olarak kabul edilir.
8 (0b1000) İzin verilenler listesi dosyasında belirtilmeyen tüm paketler, yalnızca SİSTEM kullanıcısı için dolaylı olarak izin verilenler listesinde kabul edilir.

Aşağıdaki yapılandırma, özelliği etkinleştirir (install-in ve do-not-install-in etiketlerine uyulması için) ancak bahsedilmeyen tüm sistem paketlerini tüm kullanıcılar için install-in olarak değerlendirir:

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