Android 11에서는 PermissionsController 모듈이 장기간 사용하지 않은 앱의 런타임 권한을 자동으로 취소할 수 있습니다. SDK 30 이상을 타겟팅하는 앱에는 자동 취소 기능이 기본적으로 사용 설정되어 있지만, SDK 29 이하를 타겟팅하는 앱에서는 기본적으로 사용 중지되어 있습니다. 자동 취소 기능이 사용 설정되면 정책 및 시스템 고정 권한과 기본적으로 부여되거나 역할에 따라 부여되는 권한 등 사전 부여 권한을 제외한 모든 런타임 권한이 영향을 받습니다. 자세한 내용은 사용하지 않는 앱의 권한 자동 재설정을 참고하세요.
패키지 형식
PermissionController 모듈의 형식은 버전에 따라 다릅니다.
Android 11 이상에서 PermissionController 모듈은 APEX 형식이며 업데이트할 수 있습니다. 패키지 이름은 com.google.android.permission입니다.
Android 10에서 PermissionController 모듈은 APK 형식이며 업데이트할 수 없습니다. 패키지 이름은 com.google.android.permissioncontroller입니다.
모듈 경계
Android 12에서는 packages/apps/PermissionController(platform/packages/apps/PackageInstaller 프로젝트) 및 frameworks/base/apex/permission(frameworks/base 프로젝트의 하위 디렉터리)에서 권한 모듈 코드가 이동되었습니다.
packages/modules/Permission의 새 프로젝트 구조는 다음과 같습니다.
frameworks/base/apex/permission의 파일
packages/apps/PermissionController의 PermissionController 파일
OEM은 샘플 명령어를 사용하여 원본 프로젝트 디렉터리에서 새 프로젝트 디렉터리로 패치를 이동할 수 있습니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(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-07-27(UTC)"],[],[],null,["# PermissionController\n\nThe PermissionController Mainline module contains privacy policies and the\nUI related to granting and managing permissions (for example, the policies and\nUI for granting and managing permissions).\n\nAbout PermissionController\n--------------------------\n\nThe PermissionController module handles permission-related UI, logic, and roles\nto allow access for apps for specific purpose. It controls the following:\n\n- Runtime permission granting (including granting to system apps)\n- Runtime permission management (including grouping of permissions)\n- Runtime permission usage tracking\n- Roles\n\nStarting in Android 12, the framework and system server\nclasses for [`Role`](https://developer.android.com/reference/kotlin/androidx/compose/ui/semantics/Role)\nare moved into the module to make `Role` completely modular.\n\nIn Android 10, the Package Installer app\nis split into sections to enable the permissions logic to be updated. As an\nupdatable Mainline module, PermissionController:\n\n- Interacts with the framework only via stable @SystemApi (no @hide API usage).\n- Handles permission-related intents with priority \\\u003e 0.\n- Exposes a mechanism for enabling OEMs to customize theming.\n- Provides services to which the system and applications can bind, including role management, permission revocation, and basic permission information (for Settings).\n- Supports auto-revoke for unused apps (new in Android 11).\n\nIn Android9, permission control is part of\n`com.android.packageinstaller`.\n\nAuto-revoke for unused apps\n---------------------------\n\nIn Android 11, the PermissionsController module can\nautomatically revoke runtime permissions for apps that haven't been used for an\nextended period of time. Apps targeting SDK 30 or higher have auto-revoke\n**enabled** by default, while apps targeting SDK 29 or lower have auto-revoke\n**disabled** by default. When enabled, auto-revoke affects all runtime\npermissions but exempts all pre-granted permissions, including policy- and\nsystem-fixed permissions and permissions granted by default or by role. For\ndetails, refer to [Auto-reset permissions from unused\napps](https://developer.android.com/about/versions/11/privacy/permissions#auto-reset).\n\nPackage format\n--------------\n\nThe format of the PermissionController module differs between releases.\n\n- In Android 11 or higher, the PermissionController module is in\n [APEX](/docs/core/ota/apex) format\n and is updatable. The package name is `com.google.android.permission`.\n\n- In Android 10, the PermissionController module is in APK format and isn't\n updatable. The package name is `com.google.android.permissioncontroller`.\n\nModule boundary\n---------------\n\nIn Android 12, the Permission\nmodule code is moved from `packages/apps/PermissionController`\n(the `platform/packages/apps/PackageInstaller` project) and\n`frameworks/base/apex/permission` (this is a subdirectory of the\n`frameworks/base` project).\n\nThe new project structure for `packages/modules/Permission` is as follows:\n\n- Files from `frameworks/base/apex/permission`\n- PermissionController files from `packages/apps/PermissionController`\n\nOEMs can use the sample commands to help move their patches\nfrom the original project directories to the new project directory.\n| **Note:** These commands are just a reference. OEMs can use different ways to move the patch.\n\n### Move a patch from frameworks/base/apex/permission\n\n root/frameworks/base/$ git format-patch -1 --relative=apex/permission \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-nx\"\u003ecommit\u003c/span\u003e\u003c/var\u003e --stdout \u003e \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-nx\"\u003epatch\u003c/span\u003e\u003cspan class=\"devsite-syntax-o\"\u003e-\u003c/span\u003e\u003cspan class=\"devsite-syntax-nx\"\u003efile\u003c/span\u003e\u003cspan class=\"devsite-syntax-p\"\u003e.\u003c/span\u003e\u003cspan class=\"devsite-syntax-nx\"\u003etxt\u003c/span\u003e\u003c/var\u003e\n\n root/packages/modules/Permission$ git am -p2 \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-nx\"\u003epatch\u003c/span\u003e\u003cspan class=\"devsite-syntax-o\"\u003e-\u003c/span\u003e\u003cspan class=\"devsite-syntax-nx\"\u003efile\u003c/span\u003e\u003cspan class=\"devsite-syntax-p\"\u003e.\u003c/span\u003e\u003cspan class=\"devsite-syntax-nx\"\u003etxt\u003c/span\u003e\u003c/var\u003e\n\n### Move a patch from packages/apps/PermissionController\n\n root/packages/apps/PermissionController$ git format-patch -1 \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-nx\"\u003ecommit\u003c/span\u003e\u003c/var\u003e --stdout \u003e \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-nx\"\u003epatch\u003c/span\u003e\u003cspan class=\"devsite-syntax-o\"\u003e-\u003c/span\u003e\u003cspan class=\"devsite-syntax-nx\"\u003efile\u003c/span\u003e\u003cspan class=\"devsite-syntax-p\"\u003e.\u003c/span\u003e\u003cspan class=\"devsite-syntax-nx\"\u003etxt\u003c/span\u003e\u003c/var\u003e\n\n root/packages/modules/Permission$ git am -p2 --directory=PermissionController \u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-nx\"\u003epatch\u003c/span\u003e\u003cspan class=\"devsite-syntax-o\"\u003e-\u003c/span\u003e\u003cspan class=\"devsite-syntax-nx\"\u003efile\u003c/span\u003e\u003cspan class=\"devsite-syntax-p\"\u003e.\u003c/span\u003e\u003cspan class=\"devsite-syntax-nx\"\u003etxt\u003c/span\u003e\u003c/var\u003e\n\nCustomization\n-------------\n\nOEMs can customize the permissions UI theme (colors, margins, fonts, and\ndrawables) using [runtime resource overlays\n(RROS)](/docs/core/architecture/rros)."]]