Paket sistem bawaan

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

Gunakan file XML konfigurasi sistem, yang dimodelkan pada frameworks/base/data/etc/preinstalled-packages-platform.xml, untuk mendeklarasikan paket sistem mana yang harus diinstal pada awalnya 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 menangani paket sistem yang tidak tercantum di sini dikontrol oleh mode konfigurasi.

Jenis pengguna

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

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

Arti yang tepat dari setiap parameter ditentukan 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.profile.PRIVATE
  • 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 diinstal sebelumnya di semua pengguna manusia (seperti browser web), yaitu, diinstal di 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. Agar paket sistem diprainstal di 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 harus ada di 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 setiap jenis pengguna. Misalnya, kode contoh berikut menginstal paket ini pada pengguna yang jenis penggunanya adalah profil terkelola atau tamu atau dari jenis dasar 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 do-not-install-in

Paket juga dapat dicegah agar tidak diprainstal di jenis pengguna tertentu menggunakan tag do-not-install-in. Perhatikan bahwa tag do-not-install-in 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 berjenis android.os.usertype.full.GUEST (subjenis FULL), paket ini tidak diinstal karena tag do-not-install-in lebih diutamakan 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 jenis 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. Flag 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) Perlakukan paket apa pun yang tidak disebutkan dalam file daftar yang diizinkan sebagai secara implisit diizinkan hanya untuk pengguna SISTEM.

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>