Android는 하나의 기기를 여러 사용자가 사용할 수 있는 기능을 지원합니다. 자세한 내용은 여러 사용자 지원을 참고하세요.
모든 유형의 Android 사용자에게 모든 시스템 패키지가 유용하지는 않으므로 허용 목록을 사용하여 각 사용자 유형에 맞게 사전 설치되어야 하는 시스템 패키지를 지정할 수 있습니다. 불필요한 시스템 패키지를 사전 설치하지 않으므로 사용자 생성 시간, 시작 시간 및 메모리 사용량을 최적화하는 것이 가능합니다.
frameworks/base/data/etc/preinstalled-packages-platform.xml에 모델링된 시스템 구성 XML 파일을 사용하여 신규 사용자의 사용자 유형에 맞게 초기에 설치되어야 하는 시스템 패키지를 선언합니다. 기기의 모든 시스템 패키지에는 정적 오버레이를 제외하고 XML 파일에 항목 매니페스트 이름으로 키가 지정된 항목이 있는 것이 좋습니다. 정적 오버레이는 해당 오버레이 타겟 패키지의 항목에 따라 자동으로 처리됩니다.
기기에서 여기에 나열되지 않은 시스템 패키지를 처리하는 방식은 구성 모드를 통해 제어됩니다.
사용자 유형
기본 사용자 유형 (모든 사용자가 다음 유형 중 하나 이상에 해당함)은 다음과 같습니다.
사용자 유형
설명
SYSTEM
User 0.
FULL
프로필이 없는 실제 사용자
PROFILE
프로필이 있는 실제 사용자
각 값의 정확한 의미는 frameworks/base/core/java/android/content/pm/UserInfo.java에 정의되어 있습니다.
모든 사용자는 frameworks/base/core/java/android/os/UserManager.java에 정의된 AOSP 사용자 유형 및 frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.에 정의된 OEM 맞춤 사용자 유형을 포함하여 정확히 이러한 사용자 유형 중 하나이므로, 개별 사용자 유형을 지정하여 더 상세히 제어할 수 있습니다. 더 자세한 내용은 사용자 유형 페이지를 참고하세요.
현재 AOSP 사용자 유형은 다음과 같습니다.
사용자가 android.os.usertype.full.GUEST 유형 (FULL의 하위유형)이면 do-not-install-in 태그가 install-in보다 우선하므로 이 패키지가 설치되지 않습니다.
config.xml로 동작 제어
구성 리소스 값인 config_userTypePackageWhitelistMode는 이 기능을 제어하고 기기에서 사용자 유형에 관한 항목이 없는 시스템 패키지를 해석하는 방법을 결정합니다. 자세한 내용은 frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode를 참고하세요.
frameworks/base/core/res/res/values/config.xml에서 config_userTypePackageWhitelistMode라는 정수를 다음 값의 조합으로 설정합니다. 이러한 플래그를 조합할 수 있습니다. 가장 중요한 플래그는 다음과 같습니다.
값
설명
0 (0b0000)
사용 중지: 모든 시스템 패키지를 설치합니다.
1 (0b0001)
시행: 허용 목록에 있는 경우에만 시스템 패키지를 설치합니다.
4 (0b0100)
허용 목록 파일에 언급되지 않은 패키지는 암시적으로 허용 목록에 추가된 것으로 간주합니다.
8 (0b1000)
허용 목록 파일에 언급되지 않은 패키지는 암시적으로 SYSTEM 사용자의 허용 목록에 추가된 것으로 간주합니다.
다음 구성은 (install-in 및 do-not-install-in 태그를 준수하도록) 이 기능을 사용 설정하지만, 언급되지 않은 시스템 패키지는 모든 사용자의 install-in인 것처럼 취급합니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-08-08(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-08-08(UTC)"],[],[],null,["# Preinstalled system packages\n\nAndroid supports having multiple users on a single device. To learn more,\nsee [Supporting Multiple Users](/docs/devices/admin/multi-user).\nSince not all system packages are useful on all types of Android users, you\ncan use an allowlist to specify which system packages should be pre-installed\non each type of user. By not pre-installing unnecessary system packages, you\ncan optimize user creation times, start times, and memory usage.\n| To learn more about using this feature on *Automotive* devices, see the Android 11 section in [Removing Packages for the System User](/docs/devices/automotive/users_accounts/disable_packages#android-11).\n\nUse system configuration XML files, modeled on\n`frameworks/base/data/etc/preinstalled-packages-platform.xml`,\nto declare which system packages should be initially installed for new users\nbased on their user type. All system packages on the device should ideally have\nan entry in an XML file (keyed by its manifest name), except for static overlays,\nwhich are instead treated automatically according to the entry for their corresponding\noverlay target package.\nThe way in which the device\nshould handle system packages that are not listed here is controlled by the\n[config mode](/docs/core/permissions/preinstalled-packages#behavior).\n\nUser types\n----------\n\nBase user-types (every user is at least one of these types) are:\n\n| User type | Description |\n|-----------|----------------------------|\n| `SYSTEM` | User 0. |\n| `FULL` | Any nonprofile human user. |\n| `PROFILE` | A profile human user. |\n\nThe precise meaning of each is defined in\n`frameworks/base/core/java/android/content/pm/UserInfo.java`.\n\nMore granular control can be gained by specifying individual user types since\nevery user is exactly one of these user types, which includes the AOSP user types\ndefined in `frameworks/base/core/java/android/os/UserManager.java`\nand any OEM custom user types defined in\n`frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.`\nSee the [user types](/docs/devices/admin/multi-user#user_types) page for more\ninformation.\nCurrently, AOSP user types include:\n\n- `android.os.usertype.full.SYSTEM`\n- `android.os.usertype.full.SECONDARY`\n- `android.os.usertype.full.GUEST`\n- `android.os.usertype.full.DEMO`\n- `android.os.usertype.full.RESTRICTED`\n- `android.os.usertype.profile.MANAGED`\n- `android.os.usertype.profile.PRIVATE`\n- `android.os.usertype.system.HEADLESS`\n\nExamples\n--------\n\nThe following examples address the most common use cases:\n\n1. For a system package to be pre-installed in user 0 *only* : \n\n ```carbon\n \u003cinstall-in-user-type package=\"com.android.example\"\u003e\n \u003cinstall-in user-type=\"SYSTEM\" /\u003e\n \u003c/install-in-user-type\u003e\n ```\n2. For a system package to be pre-installed on all human users (such as a web browser), that is, to be installed on any user of type `FULL` or `PROFILE`, which addresses all human users: \n\n ```carbon\n \u003cinstall-in-user-type package=\"com.android.example\"\u003e\n \u003cinstall-in user-type=\"FULL\" /\u003e\n \u003cinstall-in user-type=\"PROFILE\" /\u003e\n \u003c/install-in-user-type\u003e\n ```\n3. For a system package to be pre-installed on all human users except for profile users. For example, this could be applied to a wallpaper app: \n\n ```carbon\n \u003cinstall-in-user-type package=\"com.android.example\"\u003e\n \u003cinstall-in user-type=\"FULL\" /\u003e\n \u003c/install-in-user-type\u003e\n ```\n4. Some system packages truly are required to be on all users, regardless of type. In these cases, use: \n\n ```carbon\n \u003cinstall-in-user-type package=\"com.android.example\"\u003e\n \u003cinstall-in user-type=\"SYSTEM\"\u003e\n \u003cinstall-in user-type=\"FULL\" /\u003e\n \u003cinstall-in user-type=\"PROFILE\" /\u003e\n \u003c/install-in-user-type\u003e\n ```\n5. More granular options are also available by specifying individual user types. For example, the following sample code installs this package on any user whose user type is a managed profile or a guest or is of a `SYSTEM` base type. \n\n ```carbon\n \u003cinstall-in-user-type package=\"com.android.example\"\u003e\n \u003cinstall-in user-type=\"android.os.usertype.profile.MANAGED\" /\u003e\n \u003cinstall-in user-type=\"android.os.usertype.full.GUEST\" /\u003e\n \u003cinstall-in user-type=\"SYSTEM\"\u003e\n \u003c/install-in-user-type\u003e\n ```\n\ndo-not-install-in tag\n---------------------\n\nPackages can also be prevented from being pre-installed on particular user types\nusing the `do-not-install-in` tag. Note that `do-not-install-in`\ntags override `install-in` tags in any file. For example: \n\n```carbon\n\u003cinstall-in-user-type package=\"com.android.example\"\u003e\n \u003cinstall-in user-type=\"FULL\" /\u003e\n \u003cdo-not-install-in user-type=\"android.os.usertype.full.GUEST\"/\u003e\n\u003c/install-in-user-type\u003e\n```\nIf a user is of type `android.os.usertype.full.GUEST` (a subtype of FULL), this package is **not** installed because the `do-not-install-in` tag takes precedence over `install-in`.\n\nControl behavior with config.xml\n--------------------------------\n\nThe config resource value `config_userTypePackageWhitelistMode`\ncontrols this feature and determines how a device interprets system packages\nthat have no entry for any user type. For more information, see\n`frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode`.\n\n\n| **Caution:** While changes made to the allowlist during system updates cannot uninstall pre-existing system packages from pre-existing users, they can result in the installation of additional system packages to pre-existing users.\n\nIn `frameworks/base/core/res/res/values/config.xml`, set the integer\nnamed `config_userTypePackageWhitelistMode` to a combination of\nthe following values. These flags can be combined. The most important flags are:\n\n| Value | Description |\n|--------------|------------------------------------------------------------------------------------------------------------|\n| `0 (0b0000)` | **Disable.** Install all system packages. |\n| `1 (0b0001)` | **Enforce.** Only install system packages when allowlisted. |\n| `4 (0b0100)` | Regard any package not mentioned in the allowlist file as implicitly allowlisted. |\n| `8 (0b1000)` | Regard any package not mentioned in the allowlist file as implicitly allowlisted for just the SYSTEM user. |\n\nThe following config enables the feature (so that `install-in` and\n`do-not-install-in` tags are obeyed) but treats any nonmentioned\nsystem packages as though they are `install-in` for all users: \n\n```scdoc\n\u003cinteger name=\"config_userTypePackageWhitelistMode\"\u003e5\u003c/integer\u003e\n```"]]