Paket Sistem Prainstal

Android mendukung memiliki banyak pengguna di satu perangkat. Untuk mempelajari lebih lanjut, lihat Mendukung Banyak Pengguna . Karena tidak semua paket sistem berguna untuk 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-instal paket sistem yang tidak perlu, 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 terlebih dahulu untuk pengguna baru berdasarkan tipe penggunanya. Semua paket sistem pada perangkat idealnya memiliki entri dalam file XML (dikunci berdasarkan 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 dikendalikan oleh mode konfigurasi .

Tipe pengguna

Tipe pengguna dasar (setiap pengguna setidaknya memiliki salah satu dari tipe ini) adalah:

Tipe Pengguna Keterangan
SYSTEM Pengguna 0.
FULL Semua pengguna manusia non-profil.
PROFILE Pengguna manusia profil.

Arti sebenarnya dari masing-masing didefinisikan dalam frameworks/base/core/java/android/content/pm/UserInfo.java .

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

  • 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. Untuk paket sistem yang akan diinstal sebelumnya di pengguna 0 saja :
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
    
  2. Untuk paket sistem yang akan diinstal sebelumnya pada semua pengguna manusia (seperti browser web), yaitu diinstal pada pengguna mana pun dengan tipe FULL atau PROFILE , yang ditujukan untuk 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 dapat diinstal sebelumnya pada semua pengguna manusia kecuali pengguna profil. Misalnya, ini dapat diterapkan pada 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 diwajibkan untuk semua pengguna, apa pun 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 tipe pengguna individual. Misalnya, kode contoh berikut menginstal paket ini pada pengguna mana pun yang tipe penggunanya adalah profil terkelola atau tamu, atau tipe 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 jangan dipasang

Paket juga dapat dicegah agar tidak diinstal sebelumnya pada tipe pengguna tertentu menggunakan tag do-not-install-in . Perhatikan bahwa tag do-not-install-in menggantikan tag install-in di file apa pun. Misalnya:

<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 bertipe android.os.usertype.full.GUEST (subtipe dari FULL), paket ini tidak akan diinstal karena tag do-not-install-in lebih diutamakan daripada install-in .

Mengontrol perilaku dengan config.xml

Nilai sumber daya 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 .

Dalam frameworks/base/core/res/res/values/config.xml , atur bilangan bulat bernama config_userTypePackageWhitelistMode ke kombinasi nilai berikut. Bendera ini dapat digabungkan. Bendera yang paling penting adalah:

Nilai Keterangan
0 (0b0000) Cacat. Instal semua paket sistem.
1 (0b0001) Melaksanakan. Hanya instal paket sistem jika diizinkan.
4 (0b0100) Anggap paket apa pun yang tidak disebutkan dalam file daftar yang diizinkan sebagai paket yang diizinkan secara implisit.
8 (0b1000) Anggap paket apa pun yang tidak disebutkan dalam file daftar yang diizinkan sebagai paket yang diizinkan secara implisit hanya untuk pengguna SISTEM.

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

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