<permission>

문법:
<permission android:description="string resource"
            android:icon="drawable resource"
            android:label="string resource"
            android:name="string"
            android:permissionGroup="string"
            android:protectionLevel=["normal" | "dangerous" |
                                     "signature" | ...] />
포함된 위치:
<manifest>
설명:
이 애플리케이션이나 다른 애플리케이션의 특정 구성요소 또는 기능에 대한 액세스를 제한하는 데 사용되는 보안 권한을 선언합니다. 권한 작동 방식에 관한 자세한 내용은 앱 매니페스트 개요의 권한 섹션과 보안 도움말을 참고하세요.
속성:
android:description
권한에 관한 사용자가 읽을 수 있는 설명으로 라벨보다 길고 더 많은 정보를 제공합니다. 사용자에게 다른 애플리케이션에 권한을 부여할지 여부를 묻는 등 사용자에게 권한을 설명하기 위해 표시될 수 있습니다.

이 속성은 문자열 리소스의 참조로 설정해야 하며 label 속성과 달리 원시 문자열일 수 없습니다.

android:icon
권한을 나타내는 아이콘의 드로어블 리소스 참조입니다.
android:label
사용자가 읽을 수 있는 권한 이름입니다.

애플리케이션을 개발하는 동안 편의를 위해 라벨을 직접 원시 문자열로 설정할 수 있습니다. 그러나 애플리케이션을 게시할 준비가 되면 사용자 인터페이스의 다른 문자열처럼 현지화할 수 있도록 문자열 리소스의 참조로 설정합니다.

android:name
코드에서 권한을 참조하는 데 사용될 이름입니다(예: <uses-permission> 요소 및 애플리케이션 구성요소의 permission 속성).

참고: 모든 패키지가 동일한 인증서로 서명되지 않은 한, 여러 패키지가 같은 이름의 권한을 선언할 수 없습니다. 특정 패키지가 권한을 선언하면 다른 패키지가 첫 번째 패키지와 동일한 인증서로 서명되지 않는 한, 사용자는 동일한 권한 이름을 가진 다른 패키지를 설치할 수 없습니다.

따라서 도메인 스타일의 이름을 역순으로 사용하여 앱의 패키지 이름으로 권한 접두사를 지정하는 것이 좋습니다. 이 접두사 뒤에는 .permission.이 오고 그런 다음 권한이 나타내는 기능 설명이 SNAKE_CASE(대문자) 방식으로 나와야 합니다. 예를 들면 다음과 같습니다. com.example.myapp.permission.ENGAGE_HYPERSPACE

이 권장사항을 따르면 이름이 충돌하는 것을 방지할 수 있고 소유자와 맞춤 권한의 의도를 명확하게 식별할 수 있습니다.

android:permissionGroup
그룹에 이 권한을 할당합니다. 이 속성의 값은 그룹의 이름으로, 이 애플리케이션이나 다른 애플리케이션에 <permission-group> 요소로 선언됩니다. 이 속성을 설정하지 않으면 권한이 그룹에 속하지 않습니다.
android:protectionLevel

권한에 내포된 잠재적 위험을 특성화하고 권한을 요청하는 애플리케이션에 권한을 부여할지 여부를 결정할 때 시스템에서 따라야 하는 절차를 나타냅니다.

각 보호 수준은 기본 권한 유형과 플래그 0개 이상으로 구성됩니다. 예를 들어 "dangerous" 보호 수준에는 플래그가 없습니다. 반면 보호 수준 "signature|privileged""signature" 기본 권한 유형과 "privileged" 플래그의 조합입니다.

다음 표에서는 모든 기본 권한 유형을 보여줍니다. 플래그 목록은 protectionLevel을 참고하세요.

의미
"normal" 기본값입니다. 다른 애플리케이션, 시스템, 사용자의 위험을 최소화하면서 권한을 요청하는 애플리케이션에 격리된 애플리케이션 수준 기능에 대한 액세스 권한을 제공하는 위험성이 낮은 권한입니다. 시스템에서는 사용자의 명시적인 승인을 요구하지 않고 설치 시 권한을 요청하는 애플리케이션에 이러한 유형의 권한을 자동으로 부여합니다. 하지만 사용자는 설치 전에 항상 이러한 권한을 검토할 수 있습니다.
"dangerous" 권한을 요청하는 애플리케이션에 비공개 사용자 데이터에 대한 액세스 권한 또는 사용자에게 부정적인 영향을 줄 수 있는 기기 제어 권한을 부여하는 위험성이 높은 권한입니다. 이러한 유형의 권한은 잠재적인 위험을 초래하므로 시스템에서 권한을 요청하는 애플리케이션에 권한을 자동으로 부여하지 않을 수 있습니다. 예를 들어 애플리케이션에서 위험한 권한을 요청하면 사용자에게 표시하고 계속 진행하기 전에 확인을 요청하거나 사용자가 이러한 기능의 사용을 자동으로 허용하지 않도록 기타 다른 접근 방식을 취할 수 있습니다.
"signature" 권한을 요청하는 애플리케이션이 권한을 선언한 애플리케이션과 동일한 인증서로 서명한 경우에만 시스템에서 부여하는 권한입니다. 인증서가 일치하면 시스템에서는 사용자에게 알리거나 사용자의 명시적인 승인을 요청하지 않고 자동으로 권한을 부여합니다.
"knownSigner" 권한을 요청하는 애플리케이션이 허용된 인증서로 서명된 경우에만 시스템에서 부여하는 권한입니다. 요청자의 인증서가 나열되면 시스템은 사용자에게 알리거나 사용자의 명시적 승인을 요청하지 않고 자동으로 권한을 부여합니다.
"signatureOrSystem"

"signature|privileged"의 이전 동의어로, API 수준 23에서 지원 중단되었습니다.

Android 시스템 이미지의 전용 폴더에 있는 애플리케이션 또는 권한을 선언한 애플리케이션과 동일한 인증서로 서명된 애플리케이션에만 부여되는 권한입니다. "signature" 보호 수준은 대부분의 요구사항에 부합하며 앱이 설치된 위치와 관계없이 작동하므로 이 옵션은 사용하지 않는 것이 좋습니다.

여러 공급업체가 시스템 이미지에 빌드된 애플리케이션을 보유하고 이러한 애플리케이션이 함께 빌드되어 특정 기능을 명시적으로 공유해야 하는 특수한 상황에서 "signatureOrSystem" 권한이 사용됩니다.

도입 수준:
API 수준 1
참고 항목:
<uses-permission>
<permission-tree>
<permission-group>