| <?xml version="1.0" encoding="utf-8"?> |
| <!-- Copyright (C) 2019 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <!-- |
| This XML file declares which system packages should be initially installed for new users based on |
| the type of user. All system packages on the device should ideally have an entry in an xml file |
| (keys by its manifest name). |
| |
| Main user-types (every user will be at least one of these types) are: |
| SYSTEM (user 0) |
| FULL (any non-profile human user) |
| PROFILE (profile human user) |
| |
| Additional optional types are: GUEST, RESTRICTED, MANAGED_PROFILE, EPHEMERAL, DEMO |
| |
| The meaning of each of these user types is delineated by flags in |
| frameworks/base/core/java/android/content/pm/UserInfo.java. |
| See frameworks/base/services/core/java/com/android/server/pm/UserSystemPackageInstaller#getFlagsFromUserTypes |
| |
| The following three examples should cover most normal cases: |
| |
| 1. For a system package to be pre-installed only in user 0: |
| |
| <install-in-user-type package="com.android.example"> |
| <install-in user-type="SYSTEM"> |
| </install-in-user-type> |
| |
| |
| 2. For a system package to be pre-installed on all human users (e.g. a web browser), i.e. to be |
| installed on any user of type type FULL or PROFILE (since this covers all human users): |
| |
| <install-in-user-type package="com.android.example"> |
| <install-in user-type="FULL"> |
| <install-in user-type="PROFILE"> |
| </install-in-user-type> |
| |
| |
| 3. For a system package to be pre-installed on all human users except for profile users (e.g. a |
| wallpaper app, since profiles cannot display wallpaper): |
| |
| <install-in-user-type package="com.android.example"> |
| <install-in user-type="FULL"> |
| </install-in-user-type> |
| |
| |
| Some system packages truly are required to be on all users, regardless of type, in which case use: |
| <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> |
| |
| More fine-grained options are also available (see below). Additionally, packages can blacklist |
| user types. Blacklists override any whitelisting (in any file). |
| E.g. |
| <install-in-user-type package="com.android.example"> |
| <install-in user-type="FULL" /> |
| <do-not-install-in user-type="GUEST" /> |
| </install-in-user-type> |
| |
| If a user is of type FULL and GUEST, this package will NOT be installed, because the |
| 'do-not-install-in' takes precedence over 'install-in'. |
| |
| The way that a device treats system packages that do not have any entry (for any user type) at all |
| is determined by the config resource value config_userTypePackageWhitelistMode. |
| See frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode. |
| |
| Changes to the whitelist during system updates can result in installing new system packages |
| to pre-existing users, but cannot uninstall system packages from pre-existing users. |
| --> |
| <config> |
| <install-in-user-type package="com.android.providers.settings"> |
| <install-in user-type="SYSTEM" /> |
| <install-in user-type="FULL" /> |
| <install-in user-type="PROFILE" /> |
| </install-in-user-type> |
| </config> |