PermissionController

PermissionController 메인라인 모듈에는 권한 부여 및 관리와 관련된 개인정보처리방침 및 UI(예: 권한 부여 및 관리를 위한 정책 및 UI)가 포함됩니다.

PermissionController 정보

PermissionController 모듈은 권한 관련 UI, 로직, 역할을 처리하여 특정 목적의 앱 액세스를 허용하며, 다음을 제어합니다.

  • 런타임 권한 부여(시스템 앱에 대한 권한 부여 포함)
  • 런타임 권한 관리(권한 그룹화 포함)
  • 런타임 권한 사용 추적
  • 역할

Android 12부터 Role의 프레임워크 및 시스템 서버 클래스가 모듈로 이동하여 Role이 완전히 모듈화됩니다.

Android 10에서는 패키지 설치 앱을 섹션으로 분할하여 권한 로직을 업데이트할 수 있도록 합니다. 업데이트 가능한 메인라인 모듈로서 PermissionController는 다음을 실행합니다.

  • 안정적인 @SystemApi를 통해서만 프레임워크와 상호작용합니다(@hide API 사용 안함).
  • 우선순위가 0보다 큰 권한 관련 인텐트를 처리합니다.
  • OEM에서 테마를 맞춤설정할 수 있도록 하는 메커니즘을 노출합니다.
  • 역할 관리, 권한 취소, 설정을 위한 기본 권한 정보 등 시스템과 애플리케이션이 결합할 수 있는 서비스를 제공합니다.
  • 사용하지 않는 앱의 자동 취소 기능을 지원합니다(Android 11의 새로운 기능).

Android 9에서 권한 제어는 com.android.packageinstaller의 일부입니다.

사용하지 않는 앱의 자동 취소

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은 샘플 명령어를 사용하여 원본 프로젝트 디렉터리에서 새 프로젝트 디렉터리로 패치를 이동할 수 있습니다.

frameworks/base/apex/permission에서 패치 이동

root/frameworks/base/$ git format-patch -1 --relative=apex/permission commit --stdout > patch-file.txt

root/packages/modules/Permission$ git am -p2 patch-file.txt

packages/apps/PermissionController에서 패치 이동

root/packages/apps/PermissionController$ git format-patch -1 commit --stdout > patch-file.txt

root/packages/modules/Permission$ git am -p2 --directory=PermissionController patch-file.txt

맞춤설정

OEM은 런타임 리소스 오버레이(RROS)를 사용하여 권한 UI 테마(색상, 여백, 글꼴, 드로어블)를 맞춤설정할 수 있습니다.