Paket sistem yang telah diinstal sebelumnya

Android mendukung beberapa pengguna di satu perangkat. Untuk mempelajari lebih lanjut, lihat Mendukung Beberapa Pengguna. Karena tidak semua paket sistem berguna pada semua jenis pengguna Android, Anda dapat menggunakan daftar yang diizinkan untuk menentukan paket sistem mana yang harus diinstal sebelumnya pada setiap jenis pengguna. Dengan tidak melakukan pra-penginstalan paket sistem yang tidak perlu, Anda dapat mengoptimalkan waktu pembuatan, waktu mulai, dan penggunaan memori pengguna.

Menggunakan file XML konfigurasi sistem, yang dimodelkan frameworks/base/data/etc/preinstalled-packages-platform.xml, untuk mendeklarasikan paket sistem mana yang harus diinstal lebih dulu untuk pengguna baru berdasarkan jenis pengguna mereka. Idealnya, semua paket sistem di perangkat harus memiliki entri dalam file XML (di-key dengan nama manifesnya), kecuali untuk overlay statis, yang diperlakukan secara otomatis sesuai dengan entri untuk paket target overlay yang sesuai. Cara perangkat harus menangani paket sistem yang tidak tercantum di sini dikontrol oleh mode konfigurasi.

Jenis pengguna

Jenis pengguna dasar (setiap pengguna setidaknya memiliki salah satu dari jenis ini) adalah:

Jenis pengguna Deskripsi
SYSTEM Pengguna 0.
FULL Semua pengguna manusia nonprofil.
PROFILE Pengguna manusia profil.

Makna yang tepat dari masing-masing didefinisikan dalam frameworks/base/core/java/android/content/pm/UserInfo.java.

Kontrol yang lebih terperinci dapat diperoleh dengan menentukan jenis pengguna individual karena setiap pengguna adalah salah satu dari jenis pengguna ini, yang mencakup jenis pengguna AOSP yang ditentukan di frameworks/base/core/java/android/os/UserManager.java dan jenis pengguna kustom OEM apa pun yang ditentukan di frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. Lihat halaman jenis pengguna untuk informasi selengkapnya. Saat ini, jenis pengguna AOSP mencakup:

  • 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

Contoh

Contoh berikut membahas kasus penggunaan yang paling umum:

  1. Agar paket sistem diinstal sebelumnya hanya di pengguna 0:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
  2. Agar paket sistem diprainstal pada semua pengguna manusia (seperti {i>browser<i} web), yaitu, untuk diinstal pada semua pengguna jenis FULL atau PROFILE, yang menangani semua pengguna manusia:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
  3. Untuk paket sistem yang sudah diinstal sebelumnya pada semua pengguna manusia kecuali pengguna profil. Misalnya, ini dapat diterapkan ke aplikasi wallpaper:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
    </install-in-user-type>
  4. Beberapa paket sistem benar-benar diperlukan untuk semua pengguna, terlepas dari jenisnya. Dalam kasus ini, gunakan:
    <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. Opsi yang lebih terperinci juga tersedia dengan menentukan jenis datanya. Misalnya, kode contoh berikut menginstal paket ini pada setiap pengguna yang jenis penggunanya adalah profil terkelola atau tamu atau SYSTEM jenis dasar.
    <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

Paket juga dapat dicegah agar tidak diprainstal pada jenis pengguna tertentu menggunakan tag do-not-install-in. Perhatikan bahwa do-not-install-in tag akan menggantikan tag install-in dalam file apa pun. Contoh:

<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>
Jika pengguna adalah jenis android.os.usertype.full.GUEST (subjenis dari FULL), paket ini tidak diinstal karena do-not-install-in lebih diprioritaskan daripada install-in.

Mengontrol perilaku dengan config.xml

Nilai resource konfigurasi config_userTypePackageWhitelistMode mengontrol fitur ini dan menentukan cara perangkat menafsirkan paket sistem yang tidak memiliki entri untuk tipe pengguna apa pun. Untuk informasi selengkapnya, lihat frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode.

Di frameworks/base/core/res/res/values/config.xml, tetapkan bilangan bulat yang bernama config_userTypePackageWhitelistMode ke kombinasi nilai berikut. Tanda ini dapat digabungkan. Flag yang paling penting adalah:

Nilai Deskripsi
0 (0b0000) Nonaktifkan. Menginstal semua paket sistem.
1 (0b0001) Terapkan. Hanya menginstal paket sistem jika diizinkan.
4 (0b0100) Perlakukan paket apa pun yang tidak disebutkan dalam file daftar yang diizinkan sebagai diizinkan secara implisit.
8 (0b1000) Anggap paket apa pun yang tidak disebutkan dalam file daftar yang diizinkan sebagai diizinkan secara implisit hanya untuk pengguna SYSTEM.

Konfigurasi berikut mengaktifkan fitur (sehingga tag install-in dan do-not-install-in dipatuhi), tetapi memperlakukan paket sistem yang tidak disebutkan seolah-olah paket tersebut adalah install-in untuk semua pengguna:

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