<uses-feature>

Google Play는 앱 매니페스트에 선언된 <uses-feature> 요소를 사용하여 하드웨어 및 소프트웨어 기능 요구사항을 충족하지 않는 기기에서 앱을 필터링합니다.

애플리케이션에 필요한 기능을 지정하면 Google Play에서 모든 사용자가 아니라 애플리케이션의 기능 요구사항을 충족하는 기기 사용자에게만 애플리케이션을 제공하도록 사용 설정할 수 있습니다.

Google Play에서 필터링 기준으로 기능을 사용하는 방법에 관한 중요한 정보는 Google Play 및 기능 기반 필터링 섹션을 참고하세요.

문법:
<uses-feature
  android:name="string"
  android:required=["true" | "false"]
  android:glEsVersion="integer" />
포함된 위치:
<manifest>
설명:

애플리케이션이 사용하는 단일 하드웨어 또는 소프트웨어 기능을 선언합니다.

<uses-feature> 선언의 목적은 외부 항목에 애플리케이션이 사용하는 하드웨어 및 소프트웨어 기능 집합을 알리는 것입니다. 이 요소는 required 속성을 제공하여, 선언된 기능이 애플리케이션에 필요하고 없으면 작동할 수 없는지, 또는 이 기능이 있으면 좋지만 없어도 작동할 수 있는지 지정할 수 있습니다.

Android 기기에 따라 기능 지원이 다를 수 있으므로 <uses-feature> 요소는 애플리케이션에서 사용하는 기기별 가변 기능을 설명하는 중요한 역할을 합니다.

애플리케이션이 선언하는 사용 가능한 기능 집합은 Android PackageManager를 통해 사용 가능한 기능 상수 집합에 해당합니다. 기능 상수는 이 문서의 기능 참조 섹션에 나열되어 있습니다.

각 기능을 개별 <uses-feature> 요소에 지정해야 하므로 애플리케이션에 여러 가지 기능이 필요한 경우 <uses-feature> 요소를 여러 개 선언합니다. 예를 들어 기기의 블루투스 기능과 카메라 기능이 모두 필요한 애플리케이션은 다음 두 요소를 선언합니다.

<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
<uses-feature android:name="android.hardware.camera.any" android:required="true" />

일반적으로 애플리케이션에 필요한 모든 기능에 항상 <uses-feature> 요소를 선언합니다.

선언된 <uses-feature> 요소는 정보만 제공하므로 Android 시스템 자체에서는 애플리케이션을 설치하기 전에 기기에서 일치하는 기능 지원을 확인하지 않습니다.

그러나 다른 서비스(예: Google Play)나 애플리케이션은 애플리케이션 처리 또는 상호작용 과정에서 애플리케이션의 <uses-feature> 선언을 확인할 수도 있습니다. 따라서 애플리케이션에서 사용하는 모든 기능을 선언하는 것이 매우 중요합니다.

일부 기능의 경우 사용되는 Open GL 버전(glEsVersion으로 선언됨)과 같은 기능 버전을 정의할 수 있는 특정 속성이 있을 수도 있습니다. 카메라와 같이 기기에 있거나 없는 다른 기능은 name 속성을 사용하여 선언됩니다.

<uses-feature> 요소는 API 수준 4 이상을 실행하는 기기에서만 활성화되지만 minSdkVersion이 3 이하인 경우에도 모든 애플리케이션에서 이 요소를 포함합니다. 이전 버전의 플랫폼을 실행하는 기기는 이 요소를 무시합니다.

참고: 기능을 선언할 때 적절한 권한도 요청해야 합니다. 예를 들어 CAMERA 권한을 요청해야 애플리케이션이 카메라 API에 액세스할 수 있습니다. 권한 요청은 애플리케이션에 적절한 하드웨어 및 소프트웨어 액세스 권한을 부여합니다. 애플리케이션에서 사용하는 기능을 선언하면 적절한 기기 호환성을 보장할 수 있습니다.

속성:
android:name
애플리케이션이 사용하는 단일 하드웨어 또는 소프트웨어 기능을 설명어 문자열로 지정합니다. 유효한 속성 값은 하드웨어 기능소프트웨어 기능 섹션에 나열되어 있습니다. 속성 값은 대소문자를 구분합니다.
android:required
android:name에 지정된 기능을 애플리케이션이 요청하는지 여부를 나타내는 불리언 값입니다.
  • 기능에 android:required="true"를 선언하는 것은 지정된 기능이 기기에 없으면 애플리케이션이 작동할 수 없거나 작동하도록 설계되지 않았음을 나타냅니다.
  • 기능에 android:required="false"를 선언하는 것은 애플리케이션이 기기에 있는 경우 기능을 사용하지만 필요하다면 지정된 기능 없이도 작동하도록 설계되었음을 나타냅니다.

android:required의 기본값은 "true"입니다.

android:glEsVersion
애플리케이션에 필요한 OpenGL ES 버전입니다. 상위 16비트는 메이저 번호를 나타내고, 하위 16비트는 마이너 번호를 나타냅니다. 예를 들어 OpenGL ES 버전 2.0을 지정하려면 값을 '0x00020000'으로 설정하고 OpenGL ES 3.2를 지정하려면 값을 '0x00030002'로 설정합니다.

애플리케이션은 매니페스트에 최대 1개의 android:glEsVersion 속성을 지정합니다. 두 개 이상 지정한 경우 숫자 값이 가장 큰 android:glEsVersion이 사용되며 다른 값은 무시됩니다.

애플리케이션에서 android:glEsVersion 속성을 지정하지 않은 경우 모든 Android 기반 기기에서 지원하는 OpenGL ES 1.0만 있으면 되는 것으로 가정합니다.

애플리케이션은 지정된 OpenGL ES 버전을 지원하는 플랫폼이 하위 OpenGL ES 버전도 모두 지원하는 것으로 가정할 수 있습니다. 따라서 OpenGL ES 1.0과 OpenGL ES 2.0이 모두 필요한 애플리케이션의 경우 OpenGL ES 2.0을 요구하도록 지정합니다.

여러 OpenGL ES 버전에서 작동할 수 있는 애플리케이션은 가장 낮은 버전의 OpenGL ES만 지정합니다. 상위 OpenGL ES 수준을 사용할 수 있는지는 런타임에 확인할 수 있습니다.

지원되는 OpenGL ES 버전을 런타임에 확인하는 방법 등 OpenGL ES 사용에 관한 자세한 내용은 OpenGL ES API 가이드를 참고하세요.

도입 시기:
API 수준 4
참고 항목:

Google Play 및 기능 기반 필터링

Google Play는 사용자가 기기와 호환되는 애플리케이션만 보고 다운로드할 수 있도록 사용자에게 표시되는 애플리케이션을 필터링합니다. 애플리케이션을 필터링하는 한 가지 방법은 기능 호환성을 기준으로 하는 것입니다.

지정된 사용자 기기와 애플리케이션의 기능 호환성을 결정하기 위해 Google Play에서 비교하는 항목은 다음과 같습니다.

  • 애플리케이션에 필요한 기능. 애플리케이션 매니페스트의 <uses-feature> 요소에서 선언됨
  • 기기에서 제공되는 기능(하드웨어 또는 소프트웨어). 읽기 전용 시스템 속성을 사용하여 보고됨

기능을 정확하게 비교하기 위해 Android 패키지 관리자는 애플리케이션과 기기가 기능 요구사항 및 지원을 선언하는 데 사용하는 기능 상수의 공유 집합을 제공합니다. 사용 가능한 기능 상수는 이 문서의 기능 참조 섹션과 PackageManager의 클래스 문서에 나열되어 있습니다.

사용자가 Google Play를 시작하면 애플리케이션이 getSystemAvailableFeatures()를 호출하여 기기에서 사용 가능한 기능 목록을 패키지 관리자에게 쿼리합니다. 그러면 사용자 세션을 설정할 때 스토어 애플리케이션에서 기능 목록을 Google Play로 전달합니다.

Google Play Console에 애플리케이션을 업로드할 때마다 Google Play가 애플리케이션의 매니페스트 파일을 검색합니다. Google Play는 <uses-feature> 요소를 찾아 <uses-sdk><uses-permission> 등 다른 요소와 함께 평가합니다. 애플리케이션에 필요한 기능 집합을 설정한 후에 목록을 애플리케이션 APK 및 애플리케이션 버전과 연결된 메타데이터로서 내부에 저장합니다.

사용자가 Google Play 애플리케이션을 사용하여 애플리케이션을 검색 또는 탐색하면 서비스가 각 애플리케이션에 필요한 기능과 사용자 기기에서 사용 가능한 기능을 비교합니다. 애플리케이션에 필요한 기능이 기기에 모두 있다면 사용자가 다운로드할 수 있도록 Google Play에서 애플리케이션을 표시합니다.

필요한 기능을 기기에서 지원하지 않는 경우 Google Play는 애플리케이션을 필터링하여 사용자에게 표시되지 않고 다운로드할 수 없도록 합니다.

<uses-feature> 요소에서 선언하는 기능은 Google Play에서 애플리케이션을 필터링하는 방식에 직접 영향을 주므로 Google Play가 애플리케이션의 매니페스트를 평가하고 필수적인 기능 집합을 설정하는 방법을 잘 아는 것이 중요합니다. 자세한 내용은 다음 섹션을 참고하세요.

명시적으로 선언된 기능 기반 필터링

명시적으로 선언된 기능은 애플리케이션이 <uses-feature> 요소에 선언한 기능입니다. 기능 선언에는 API 수준 5 이상에 컴파일하는 경우 android:required=["true" | "false"] 속성이 포함될 수 있습니다.

이를 통해 애플리케이션에 해당 기능이 필요하고 기능이 없으면 제대로 작동할 수 없는지("true") 또는 제공되면 기능을 사용하지만 기능이 없어도 실행되도록 설계되었는지("false") 지정할 수 있습니다.

Google Play는 명시적으로 선언된 기능을 다음과 같은 방식으로 처리합니다.

  • 다음 예와 같이 필요한 기능으로 명시적으로 선언한 경우 Google Play는 애플리케이션의 필수 기능 목록에 해당 기능을 추가합니다. 그런 다음 이 기능을 제공하지 않는 기기의 사용자에게 애플리케이션이 표시되지 않도록 필터링합니다.
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
    
  • 다음 예와 같이 기능이 필요하지 않은 것으로 명시적으로 선언하면 Google Play는 필수 기능 목록에 기능을 추가하지 않습니다. 따라서 필요하지 않다고 명시적으로 선언된 기능은 애플리케이션을 필터링할 때 고려되지 않습니다. 다른 필터링 규칙이 적용되지 않는다면 선언된 기능을 기기에서 제공하지 않더라도 Google Play는 애플리케이션이 기기와 호환된다고 가정하고 사용자에게 계속 표시합니다.
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    
  • android:required 속성 없이 기능을 명시적으로 선언한 경우 Google Play에서 필요한 기능으로 고려하여 필터링하도록 설정합니다.

일반적으로 애플리케이션이 Android 1.6 이하에서 실행되도록 설계된 경우 android:required 속성은 API에서 사용할 수 없으며 Google Play는 모든 <uses-feature> 선언이 필수라고 가정합니다.

참고: android:required="false" 속성을 포함하도록 기능을 명시적으로 선언한 경우 지정된 기능에 적용되는 모든 Google Play 필터링을 효과적으로 사용 중지할 수 있습니다.

암시적 기능 기반 필터링

암시적 기능은 애플리케이션이 제대로 작동하기 위해 필요하지만 매니페스트 파일의 <uses-feature> 요소에서 선언하지 않는 기능입니다. 엄밀히 말하면 모든 애플리케이션은 사용하거나 필요한 모든 기능을 항상 선언하는 것이 가장 좋으며, 애플리케이션에 사용되는 기능에 관한 선언이 없으면 오류로 간주될 수 있습니다.

하지만 Google Play는 사용자와 개발자를 보호하기 위해 명시적으로 선언된 기능에서와 마찬가지로 각 애플리케이션의 암시적 기능을 찾고 이러한 기능에 적용되는 필터를 설정합니다.

애플리케이션은 기능이 필요하지만 이를 선언하지 않을 수 있습니다. 이유는 다음과 같습니다.

  • 애플리케이션이 <uses-feature> 요소를 사용할 수 없는 이전 버전의 Android 라이브러리(Android 1.5 이하)에 컴파일되었습니다.
  • 개발자가 기능이 모든 기기에 있으므로 선언이 필요하지 않다고 잘못 가정했습니다.
  • 개발자가 기능 선언을 실수로 누락했습니다.
  • 개발자가 기능을 명시적으로 선언하지만 선언이 유효하지 않습니다. 예를 들어 <uses-feature> 요소 이름에 맞춤법 오류가 있거나 android:name 속성에 인식할 수 없는 문자열 값이 있으면 기능 선언이 무효화됩니다.

이러한 사례를 설명하기 위해 Google Play는 매니페스트 파일에 선언된 다른 요소, 특히 <uses-permission> 요소를 검사하여 애플리케이션의 암시적 기능 요구사항을 찾으려고 시도합니다.

애플리케이션이 하드웨어 관련 권한을 요청하면 Google Play는 해당하는 <uses-feature> 선언이 없더라도 애플리케이션이 기본 하드웨어 기능을 사용 및 요구하는 것으로 가정합니다. 이러한 권한을 위해 Google Play는 애플리케이션에 대해 저장하는 메타데이터에 기본 하드웨어 기능을 추가하고 이 기능에 대해 필터를 설정합니다.

예를 들어 애플리케이션이 CAMERA 권한을 요청하면 Google Play는 애플리케이션이 android.hardware.camera<uses-feature> 요소를 선언하지 않더라도 후면 카메라를 요청하는 것으로 가정합니다. 따라서 Google Play는 후면 카메라가 없는 기기를 필터링합니다.

Google Play가 특정 암시적 기능에 기반하여 필터링하지 않게 하려면 <uses-feature> 요소에 그 기능을 명시적으로 선언하고 android:required="false" 속성을 포함합니다. 예를 들어 CAMERA 권한을 통해 암시된 필터링을 중지하려면 다음 기능을 선언합니다.

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

주의: <uses-permission> 요소에서 요청하는 권한은 Google Play에서 애플리케이션을 필터링하는 방식에 직접 영향을 줄 수 있습니다. 기능 요구사항을 암시하는 권한 섹션에는 기능 요구사항을 암시하여 필터링을 트리거하는 전체 권한 집합이 나열되어 있습니다.

블루투스 기능에 대한 특수 처리

Google Play는 블루투스 필터링을 결정할 때 이전 예의 설명과는 약간 다른 규칙을 적용합니다.

애플리케이션이 <uses-permission> 요소에 블루투스 권한을 선언하지만 <uses-feature> 요소에 블루투스 기능을 명시적으로 선언하지 않는 경우 Google Play는 <uses-sdk> 요소에 지정된 대로 애플리케이션이 실행되도록 설계된 Android 플랫폼의 버전을 확인합니다.

다음 표와 같이 Google Play는 애플리케이션이 가장 낮은 플랫폼 또는 타겟 플랫폼을 Android 2.0(API 수준 5) 이상으로 선언하는 경우에만 블루투스 기능 필터링을 사용 설정합니다. 그러나 Google Play는 애플리케이션이 <uses-feature> 요소에 블루투스 기능을 명시적으로 선언하는 경우 필터링에 일반적인 규칙을 적용합니다.

표 1. Google Play가 블루투스 권한을 요청하지만 <uses-feature> 요소에 블루투스 기능을 선언하지 않는 애플리케이션을 위한 블루투스 기능 요구사항을 결정하는 방법

minSdkVersion이 다음과 같은 경우 그리고 targetSdkVersion이 다음과 같은 경우 결과
<=4 또는 <uses-sdk>가 선언되지 않음 <=4 Google Play가 보고된 android.hardware.bluetooth 기능 지원에 따라 기기에서 애플리케이션을 필터링하지 않습니다.
<=4 >=5 Google Play가 android.hardware.bluetooth 기능을 지원하지 않는 기기(이전 버전 포함)에서 애플리케이션을 필터링합니다.
>=5 >=5

다음 예는 Google Play가 블루투스 기능을 처리하는 방식에 따른 다양한 필터링 효과를 보여줍니다.

첫 번째 예에서 이전 API 수준에서 실행되도록 설계된 애플리케이션이 블루투스 권한을 선언하지만 <uses-feature> 요소에 블루투스 기능을 선언하지 않습니다.
결과: Google Play가 어떤 기기에서도 애플리케이션을 필터링하지 않습니다.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" />
    ...
</manifest>
두 번째 예에서 동일한 애플리케이션이 대상 API 수준 '5'도 선언합니다.
결과: 이제 Google Play에서 기능을 필요한 것으로 가정하고 블루투스 지원을 보고하지 않는 모든 기기(이전 버전의 플랫폼을 실행하는 기기 포함)에서 애플리케이션을 필터링합니다.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
여기서 이제 동일한 애플리케이션이 블루투스 기능을 구체적으로 선언합니다.
결과: 이전 예와 같습니다(필터링 적용됨).
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
다음의 경우 동일한 애플리케이션이 android:required="false" 속성을 추가합니다.
결과: Google Play가 모든 기기에서 블루투스 기능 지원에 기반한 필터링을 사용 중지합니다.
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" android:required="false" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>

애플리케이션에 필요한 기능 테스트

Android SDK에 포함된 aapt2 도구를 사용하여, 선언된 기능과 권한에 따라 Google Play가 애플리케이션을 필터링하는 방법을 결정할 수 있습니다. 이렇게 하려면 dump badging 명령어를 사용하여 aapt2를 실행합니다. 그러면 aapt2가 애플리케이션의 매니페스트를 파싱하고 Google Play가 사용하는 것과 동일한 규칙을 적용하여 애플리케이션에 필요한 기능을 결정합니다.

해당 도구를 사용하려면 다음 단계를 수행합니다.

  1. 서명되지 않은 APK로 애플리케이션을 빌드하고 내보냅니다. Android 스튜디오에서 개발하는 경우 다음과 같이 Gradle을 사용하여 애플리케이션을 빌드합니다.
    1. 프로젝트를 열고 Run > Edit Configurations를 선택합니다.
    2. Run/Debug Configurations 창 왼쪽 상단의 더하기 기호를 선택합니다.
    3. Gradle을 선택합니다.
    4. Name에 'Unsigned APK'를 입력합니다.
    5. Gradle project 섹션에서 모듈을 선택합니다.
    6. Tasks에 'assemble'을 입력합니다.
    7. OK를 선택하여 새 구성을 완료합니다.
    8. 툴바에서 Unsigned APK 실행 구성을 선택하고 Run > Run 'Unsigned APK'를 선택합니다.
    서명되지 않은 APK는 <ProjectName>/app/build/outputs/apk/ 디렉터리에서 찾을 수 있습니다.
  2. aapt2 도구가 아직 PATH에 없다면 이 도구를 찾습니다. SDK 도구 r8 이상을 사용 중인 경우 <SDK>/build-tools/<tools version number> 디렉터리에서 aapt2를 찾을 수 있습니다.

    참고: 사용 가능한 최신 Build-Tools 구성요소용으로 제공되는 버전의 aapt2를 사용해야 합니다. 최신 Build-Tools 구성요소가 없는 경우 Android SDK Manager를 사용해 다운로드합니다.

  3. 다음 구문을 사용하여 aapt2를 실행합니다.
$ aapt2 dump badging <path_to_exported_.apk>

다음은 이전에 표시된 두 번째 블루투스 예의 명령어 결과를 보여주는 예입니다.

$ ./aapt2 dump badging BTExample.apk
package: name='com.example.android.btexample' versionCode='' versionName=''
uses-permission:'android.permission.BLUETOOTH_ADMIN'
uses-feature:'android.hardware.bluetooth'
sdkVersion:'3'
targetSdkVersion:'5'
application: label='BT Example' icon='res/drawable/app_bt_ex.png'
launchable activity name='com.example.android.btexample.MyActivity'label='' icon=''
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'small' 'normal' 'large'
locales: '--_--'
densities: '160'

기능 참조

다음 섹션에서는 하드웨어 기능, 소프트웨어 기능, 특정 기능 요구사항을 암시하는 권한 집합에 관한 참조 정보를 제공합니다.

하드웨어 기능

이 섹션에서는 현재 플랫폼 버전 대부분이 지원하는 하드웨어 기능을 소개합니다. 앱이 하드웨어 기능을 사용하거나 필요로 함을 나타내려면 관련 값("android.hardware"로 시작)을 android:name 속성에서 선언합니다. 하드웨어 기능을 선언할 때마다 개별 <uses-feature> 요소를 사용해야 합니다.

오디오 하드웨어 기능

android.hardware.audio.low_latency
앱이 사운드 입력 또는 출력 처리 시 지연 시간을 줄이는, 기기의 짧은 지연 시간 오디오 파이프라인을 사용합니다.
android.hardware.audio.output
앱이 기기의 스피커, 오디오 잭, 블루투스 스트리밍 기능 또는 유사한 메커니즘을 사용하여 사운드를 전송합니다.
android.hardware.audio.pro
앱이 기기의 고급 오디오 기능 및 성능을 사용합니다.
android.hardware.microphone
앱이 기기의 마이크를 사용하여 오디오를 녹음합니다.

블루투스 하드웨어 기능

android.hardware.bluetooth
앱이 일반적으로 다른 블루투스 지원 기기와 통신하기 위해 기기의 블루투스 기능을 사용합니다.
android.hardware.bluetooth_le
앱이 기기의 저전력 블루투스 무선 기능을 사용합니다.

카메라 하드웨어 기능

참고: Google Play에서 앱을 불필요하게 필터링하지 않도록 하려면 앱이 작동하는데 필수적이지 않은 모든 카메라 기능에 android:required="false"를 추가합니다. 그러지 않으면 Google Play는 그 기능이 필요한 것으로 가정하고 그 기능을 지원하지 않는 기기의 앱 액세스를 차단합니다.

대형 화면 지원

일부 대형 화면 기기에서는 모든 카메라 기능이 지원되지는 않습니다. Chromebook에는 일반적으로 후면(월드 페이싱) 카메라, 자동 초점 또는 플래시가 없습니다. 하지만 Chromebook에는 전면(사용자 페이싱) 카메라가 있으며 외장 카메라에 연결되는 경우가 많습니다.

기본 카메라 지원을 제공하고 앱을 가능한 한 많은 기기에서 사용할 수 있도록 하려면 앱 매니페스트에 다음 카메라 기능 설정을 추가합니다.

<uses-feature android:name="android.hardware.camera.any" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />

앱의 사용 사례를 지원하도록 기능 설정을 조정하세요. 그러나 최대한 많은 기기에서 앱을 사용할 수 있도록 하려면 항상 required 속성을 포함하여 기능이 필수인지를 명시적으로 지정해야 합니다.

기능 목록
android.hardware.camera.any

앱이 기기의 카메라 중 하나를 사용하거나 기기에 연결된 외부 카메라를 사용합니다. 후면(월드) 페이싱 카메라 또는 전면(사용자) 페이싱 카메라가 필요하지 않은 앱에서는 각각 android.hardware.camera 또는 android.hardware.camera.front 대신 이 기능을 사용하세요.

CAMERA 권한은 앱이 android.hardware.camera도 사용함을 의미합니다. android.hardware.cameraandroid:required="false"로 선언되지 않으면 후면 카메라는 필수 기능입니다.

android.hardware.camera

앱이 기기의 후면(월드 페이싱) 카메라를 사용합니다.

주의: 전면(사용자 페이싱) 카메라만 있는 Chromebook과 같은 기기에서는 이 기능을 지원하지 않습니다. 카메라를 향하는 방향과 관계없이 앱에서 모든 카메라를 사용할 수 있는 경우 android.hardware.camera.any를 사용합니다.

참고: CAMERA 권한은 후면 카메라가 필수 기능임을 나타냅니다. 앱 매니페스트에 CAMERA 권한이 포함되어 있을 때 Google Play에서 올바로 필터링되도록 하려면 앱에서 camera 기능을 사용함을 명시적으로 지정하고 다음과 같이 필수 여부를 표시하세요.
<uses-feature android:name="android.hardware.camera" android:required="false" />

android.hardware.camera.front

앱이 기기의 전면 (사용자 페이싱) 카메라를 사용합니다.

CAMERA 권한은 앱이 android.hardware.camera도 사용함을 의미합니다. android.hardware.cameraandroid:required="false"로 선언되지 않으면 후면 카메라는 필수 기능입니다.

주의: 앱이 android.hardware.camera.front를 사용하지만 android.hardware.cameraandroid.required="false"로 명시적으로 선언하지 않는 경우 Chromebook과 같이 후면 카메라가 없는 기기는 Google Play에 의해 필터링됩니다. 앱이 전면 카메라만 있는 기기를 지원한다면 불필요한 필터링을 방지하기 위해 android.required="false"android.hardware.camera를 선언합니다.

android.hardware.camera.external

앱이 사용자가 기기에 연결한 외부 카메라와 통신합니다. 이 기능은 앱에서 사용할 외부 카메라의 가용성을 보장하지 않습니다.

CAMERA 권한은 앱이 android.hardware.camera도 사용함을 의미합니다. android.hardware.cameraandroid:required="false"로 선언되지 않으면 후면 카메라는 필수 기능입니다.

android.hardware.camera.autofocus

앱이 기기의 카메라가 지원하는 자동 초점 기능을 사용합니다.

참고: CAMERA 권한은 자동 초점이 필수 기능임을 나타냅니다. 앱 매니페스트에 CAMERA 권한이 있는 경우 Google Play에서 올바로 필터링되도록 하려면 앱에서 자동 초점 기능을 사용함을 명시적으로 지정하고 그 기능이 필수인지를 나타내야 합니다. 예를 들면 다음과 같습니다.
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

android.hardware.camera.flash

앱이 기기의 카메라가 지원하는 플래시 기능을 사용합니다.

android.hardware.camera.capability.manual_post_processing

앱이 기기의 카메라에서 지원하는 MANUAL_POST_PROCESSING 기능을 사용합니다.

이 기능을 사용하면 앱이 카메라의 자동 화이트 밸런스 기능을 재정의할 수 있습니다. TRANSFORM_MATRIXandroid.colorCorrection.transform, android.colorCorrection.gains, android.colorCorrection.mode를 사용합니다.

android.hardware.camera.capability.manual_sensor

앱이 기기의 카메라에서 지원하는 MANUAL_SENSOR 기능을 사용합니다.

이 기능은 카메라의 노출 시간 및 민감도를 특정 값으로 고정할 수 있는 자동 노출 잠금(android.control.aeLock)을 지원함을 암시합니다.

android.hardware.camera.capability.raw

앱이 기기의 카메라에서 지원하는 RAW 기능을 사용합니다.

이 기능은 기기가 DNG (원시) 파일을 저장할 수 있음을 의미합니다. 기기의 카메라는 앱이 RAW 이미지를 직접 처리하는 데 필요한 DNG 관련 메타데이터를 제공합니다.

android.hardware.camera.level.full
앱이 한 개 이상의 기기 카메라에서 제공하는 FULL 수준의 이미지 캡처 지원을 사용합니다. FULL 지원에는 연속 촬영 기능, 프레임당 컨트롤 및 수동 후처리 컨트롤 등이 해당됩니다. INFO_SUPPORTED_HARDWARE_LEVEL_FULL을 참고하세요.

기기 UI 하드웨어 기능

android.hardware.type.automotive

앱이 차량 내부의 화면에 UI를 표시하도록 설계되었습니다. 사용자는 하드 버튼, 터치, 회전식 컨트롤러, 마우스와 유사한 인터페이스 등을 사용하여 앱과 상호작용합니다. 일반적으로 차량 화면은 차량의 계기판 또는 중앙 콘솔에 표시되며 크기와 해상도가 제한됩니다.

참고: 사용자가 운전하면서 이러한 유형의 앱 UI를 사용하고 있으므로 앱은 운전자 주의 분산 행동을 최소화해야 합니다.

android.hardware.type.television

(지원이 중단되었습니다. android.software.leanback를 대신 사용하세요.)

앱이 텔레비전에 UI를 표시하도록 설계되었습니다. 이 기능은 '텔레비전'을 일반적인 거실 텔레비전 환경으로 정의합니다. 대형 화면에 앱이 표시되고 사용자는 멀리 떨어져 앉아 있으며 주요 입력 방식은 마우스나 포인터, 터치 기기가 아닌 D패드 등입니다.

android.hardware.type.watch
앱이 시계에 UI를 표시하도록 설계되었습니다. 시계는 손목과 같은 몸에 착용합니다. 사용자는 시계와 매우 가까운 곳에서 상호작용합니다.
android.hardware.type.pc

앱이 Chromebook에 UI를 표시하도록 설계되었습니다. Chromebook이 마우스 및 터치패드 하드웨어를 사용하므로 이 기능은 마우스 및 터치패드의 입력 에뮬레이션을 사용 중지합니다. 마우스 입력을 참고하세요.

참고: 이 요소에 required="false"를 설정합니다. 그러지 않으면 Google Play 스토어로 Chromebook이 아닌 기기에서 앱을 사용할 수 없게 됩니다.

지문 인식 하드웨어 기능

android.hardware.fingerprint
앱이 기기의 생체 인식 하드웨어를 사용하여 지문을 읽습니다.

게임패드 하드웨어 기능

android.hardware.gamepad
앱이 기기 또는 연결된 게임패드의 게임 컨트롤러 입력을 캡처합니다.

적외선 하드웨어 기능

android.hardware.consumerir
앱이 일반적으로 다른 소비자용 적외선 기기와 통신하기 위해 기기의 적외선 기능을 사용합니다.

위치 하드웨어 기능

android.hardware.location
앱이 위치를 결정하기 위해 기기에서 한 개 이상의 기능(예: GPS 위치, 네트워크 위치, 휴대전화 위치)을 사용합니다.
android.hardware.location.gps

앱이 기기에서 위성 위치 확인 시스템(GPS) 수신기가 제공하는 정확한 위치 좌표를 사용합니다.

이 기능을 사용하는 앱은 상위 기능인 android.hardware.locationandroid:required="false"로 선언하지 않는 경우 이 상위 기능도 사용함을 암시합니다.

android.hardware.location.network

앱이 기기에 지원되는 네트워크 기반 위치정보 시스템이 제공하는 대략적인 위치 좌표를 사용합니다.

이 기능을 사용하는 앱은 상위 기능인 android.hardware.locationandroid:required="false"로 선언하지 않는 경우 이 상위 기능도 사용함을 암시합니다.

NFC 하드웨어 기능

android.hardware.nfc
앱이 기기의 근거리 무선통신 (NFC) 무선 기능을 사용합니다.
android.hardware.nfc.hce

앱이 기기에 호스팅된 NFC 카드 에뮬레이션을 사용합니다.

OpenGL ES 하드웨어 기능

android.hardware.opengles.aep
앱이 기기에 설치된 OpenGL ES Android Extension Pack을 사용합니다.

센서 하드웨어 기능

android.hardware.sensor.accelerometer
앱이 기기 가속도계의 눈금 변화를 판독하여 기기의 현재 방향을 감지합니다. 예를 들어 앱은 가속도계 판독값으로 세로 모드와 가로 모드 간 방향 전환이 필요한 시점을 결정할 수 있습니다.
android.hardware.sensor.ambient_temperature
앱이 기기의 주변 환경 온도 센서를 사용합니다. 예를 들어 날씨 앱이 실내 또는 실외 온도를 보고할 수 있습니다.
android.hardware.sensor.barometer
앱이 기기의 기압계를 사용합니다. 예를 들어 날씨 앱이 기압을 보고할 수 있습니다.
android.hardware.sensor.compass
앱이 기기의 자기계(나침반)를 사용합니다. 예를 들어 내비게이션 앱이 사용자가 향하는 현재 방향을 표시할 수 있습니다.
android.hardware.sensor.gyroscope
앱이 기기의 자이로스코프를 사용하여 회전 및 비틀기를 감지하고 6축 방향 시스템을 만듭니다. 이 센서를 사용하는 앱은 세로 모드와 가로 모드 간 방향 전환 필요성을 훨씬 원활하게 감지할 수 있습니다.
android.hardware.sensor.hifi_sensors
앱이 기기의 고정밀(Hi-Fi) 센서를 사용합니다. 예를 들어 게임 앱은 사용자의 움직임을 높은 정밀도로 감지할 수 있습니다.
android.hardware.sensor.heartrate
앱이 기기의 심박수 모니터를 사용합니다. 예를 들어 피트니스 앱이 시간의 흐름에 따른 사용자의 심박수 추세를 보고할 수 있습니다.
android.hardware.sensor.heartrate.ecg
앱이 기기의 심전도(ECG) 심박수 센서를 사용합니다. 예를 들어 피트니스 앱이 사용자의 심박수에 관한 상세한 정보를 보고할 수 있습니다.
android.hardware.sensor.light
앱이 기기의 광센서를 사용합니다. 예를 들어 앱이 주변 조명 조건에 따라 두 가지 색 구성표 중 하나를 표시할 수 있습니다.
android.hardware.sensor.proximity
앱이 기기의 근접 센서를 사용합니다. 예를 들어 전화 통신 앱이 사용자가 몸에 가깝게 기기를 잡고 있다고 감지하면 기기의 화면을 끌 수 있습니다.
android.hardware.sensor.relative_humidity
앱이 기기의 상대 습도 센서를 사용합니다. 예를 들어 날씨 앱이 현재 이슬점을 계산 및 보고하기 위해 습도를 사용할 수 있습니다.
android.hardware.sensor.stepcounter
앱이 기기의 보행 계수기를 사용합니다. 예를 들어 피트니스 앱이 1일 걸음 수 목표를 달성하기 위해 필요한 걸음 수를 보고할 수 있습니다.
android.hardware.sensor.stepdetector
앱이 기기의 보행 감지기를 사용합니다. 예를 들어 피트니스 앱이 걸음 간 시간 간격을 사용하여 사용자의 운동 유형을 추정할 수 있습니다.

화면 하드웨어 기능

android.hardware.screen.landscape
android.hardware.screen.portrait

앱이 기기가 세로 모드 또는 가로 모드를 사용하도록 요구합니다. 앱이 두 방향을 모두 지원하는 경우 둘 중 한 기능을 선언할 필요가 없습니다.

예를 들어 앱에 세로 모드 방향이 필요한 경우 세로 모드 방향을 지원하는 기기만 앱을 실행하거나 사용자 선택에 따라 앱을 실행할 수 있도록 다음 기능을 선언합니다.

<uses-feature android:name="android.hardware.screen.portrait" />

기본적으로 두 방향이 모두 필요하지 않은 것으로 가정하므로 앱은 한 방향 또는 두 방향을 모두 지원하는 기기에 설치할 수 있습니다. 그러나 android:screenOrientation 속성을 사용하여 활동이 특정 방향으로 실행되도록 요청하는 경우 이 선언은 앱에 해당 방향이 필요하다고 암시합니다.

예를 들어 android:screenOrientation"landscape" 또는 "reverseLandscape", "sensorLandscape"로 선언하는 경우 앱은 가로 모드 방향을 지원하는 기기에서만 사용할 수 있습니다.

<uses-feature> 요소를 사용하여 이 방향의 요구사항을 선언하는 것이 좋습니다. android:screenOrientation을 사용하여 활동의 방향을 선언하지만 실제로 필요하지 않았다면 <uses-feature> 요소와 android:required="false"를 사용하여 방향 선언 요건을 사용 중지할 수 있습니다.

이전 버전과의 호환성을 위해 Android 3.1(API 수준 12) 이하를 실행 중인 기기는 가로 모드 방향과 세로 모드 방향을 모두 지원합니다.

전화통신 하드웨어 기능

android.hardware.telephony
앱이 데이터 통신 서비스 기능이 있는 전화통신 무선 등 기기의 전화통신 무선 기능을 사용합니다.
android.hardware.telephony.cdma

앱이 CDMA(Code Division Multiple Access) 전화통신 무선 시스템을 사용합니다.

이 기능을 사용하는 앱은 상위 기능인 android.hardware.telephonyandroid:required="false"로 선언하지 않는 경우 이 상위 기능도 사용함을 암시합니다.

android.hardware.telephony.gsm

앱이 GSM(Global System for Mobile Communications) 전화통신 무선 시스템을 사용합니다.

이 기능을 사용하는 앱은 상위 기능인 android.hardware.telephonyandroid:required="false"로 선언하지 않는 경우 이 상위 기능도 사용함을 암시합니다.

터치스크린 하드웨어 기능

android.hardware.faketouch

앱이 탭 및 드래그와 같은 기본적인 터치 상호작용 이벤트를 사용합니다.

필요한 기능으로 선언한 경우, 이 기능은 기기에 에뮬레이션된 '모조 터치' 터치스크린이 있거나 실제 터치스크린이 있는 경우에만 앱이 기기와 호환됨을 나타냅니다.

모조 터치 인터페이스를 제공하는 기기는 터치스크린 기능 일부를 에뮬레이션하는 사용자 입력 시스템을 제공합니다. 예를 들어 마우스 또는 리모컨은 화상 커서를 구동할 수 있습니다.

앱에 기본적인 포인트 및 클릭 상호작용이 필요하고 D패드 컨트롤러만으로는 작동하지 않는 경우 이 기능을 선언합니다. 이는 터치 상호작용의 최소 수준이므로 더 복잡한 터치 인터페이스를 지원하는 기기는 이 기능을 선언하는 앱을 사용할 수 있습니다.

앱에는 기본적으로 android.hardware.faketouch 기능이 필요합니다. 앱을 터치스크린이 있는 기기에서만 사용하도록 제한하려면 다음과 같이 터치스크린이 필요하다고 명시적으로 선언해야 합니다.

<uses-feature android:name="android.hardware.touchscreen"
    android:required="true" />

다음 예와 같이 android.hardware.touchscreen을 명시적으로 요구하지 않는 모든 앱은 android.hardware.faketouch가 있는 기기에서도 작동합니다.

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
android.hardware.faketouch.multitouch.distinct

앱이 모조 터치 인터페이스에서 두 개 이상의 서로 다른 '손가락'을 추적합니다. 이 기능은 android.hardware.faketouch 기능의 상위 집합입니다. 필요한 기능으로 선언한 경우, 이 기능은 앱이 고유한 두 개 이상의 손가락 추적을 에뮬레이션하거나 실제 터치스크린이 있는 기기 전용으로 호환됨을 나타냅니다.

android.hardware.touchscreen.multitouch.distinct가 정의하는 고유한 다중 터치와 달리 모조 터치 인터페이스와 고유한 다중 터치를 지원하는 입력 장치는 입력이 화상 커서 이동으로 변형되므로 두 손가락 동작을 모두 지원하지는 않습니다. 즉, 이러한 기기에서 한 손가락 동작은 커서를 이동하고 두 손가락 스와이프는 한 손가락 터치 이벤트를 발생시키며 다른 두 손가락 동작은 상응하는 두 손가락 터치 이벤트를 트리거합니다.

커서 이동을 위해 두 손가락 터치 트랙패드를 제공하는 기기는 이 기능을 지원합니다.

android.hardware.faketouch.multitouch.jazzhand

앱이 모조 터치 인터페이스에서 5개 이상의 서로 다른 '손가락'을 추적합니다. 이 기능은 android.hardware.faketouch 기능의 상위 집합입니다. 필요한 기능으로 선언한 경우, 이 기능은 앱이 고유한 5개 이상의 손가락 추적을 에뮬레이션하거나 실제 터치스크린이 있는 기기 전용으로 호환됨을 나타냅니다.

android.hardware.touchscreen.multitouch.jazzhand가 정의하는 고유한 다중 터치와 달리 모조 터치 인터페이스와 재즈핸드(jazzhand) 다중 터치를 지원하는 입력 장치는 입력이 화상 커서 이동으로 변형되므로 다섯 손가락 동작을 모두 지원하지는 않습니다. 즉, 이러한 기기에서 한 손가락 동작은 커서를 이동하고 여러 손가락 동작은 한 손가락 터치 이벤트를 발생시키며 다른 여러 손가락 동작은 상응하는 여러 손가락 터치 이벤트를 트리거합니다.

커서 이동을 위해 다섯 손가락 터치 트랙패드를 제공하는 기기는 이 기능을 지원합니다.

android.hardware.touchscreen

앱이 플링과 같은 기본 터치 이벤트보다 상호작용이 많은 동작에 기기의 터치스크린 기능을 사용합니다. 이 기능은 android.hardware.faketouch 기능의 상위 집합입니다.

기본적으로 모든 앱에는 이 기능이 필요하므로 에뮬레이션된 '모조 터치' 인터페이스만 제공하는 기기에서는 사용할 수 없습니다. 모조 터치 인터페이스를 제공하는 기기 또는 D패드 컨트롤러만 제공하는 기기에서도 앱을 사용할 수 있게 하려면 android.hardware.touchscreenandroid:required="false"로 선언하여 터치스크린이 필요하지 않음을 명시적으로 선언하면 됩니다. 앱에서 실제 터치스크린 인터페이스를 사용하긴 하나 필수가 아닌 경우 이 선언을 추가합니다. android.hardware.touchscreen을 명시적으로 요구하지 않는 모든 앱은 android.hardware.faketouch가 있는 기기에서도 작동합니다.

실제로 앱에서 플링과 같은 고급 터치 동작을 실행하기 위해 터치 인터페이스가 필요한 경우, 터치 인터페이스 기능은 기본적으로 요구되는 기능이므로 선언할 필요가 없습니다. 그러나 앱이 사용하는 모든 기능을 명시적으로 선언하는 것이 좋습니다.

여러 손가락 동작과 같은 훨씬 복잡한 터치 상호작용이 필요한 경우 앱이 고급 터치스크린 기능을 사용함을 선언합니다.

android.hardware.touchscreen.multitouch

앱이 손가락 모으기 동작과 같은 기기의 기본적인 두 지점 다중 터치 기능을 사용하지만 터치를 독립적으로 추적할 필요는 없습니다. 이 기능은 android.hardware.touchscreen 기능의 상위 집합입니다.

이 기능을 사용하는 앱은 상위 기능인 android.hardware.touchscreenandroid:required="false"로 선언하지 않는 경우 이 상위 기능도 사용함을 암시합니다.

android.hardware.touchscreen.multitouch.distinct

앱이 두 개 이상의 지점을 독립적으로 추적하기 위해 기기의 고급 다중 터치 기능을 사용합니다. 이 기능은 android.hardware.touchscreen.multitouch 기능의 상위 집합입니다.

이 기능을 사용하는 앱은 상위 기능인 android.hardware.touchscreen.multitouchandroid:required="false"로 선언하지 않는 경우 이 상위 기능도 사용함을 암시합니다.

android.hardware.touchscreen.multitouch.jazzhand

앱이 다섯 개 이상의 지점을 독립적으로 추적하기 위해 기기의 고급 다중 터치 기능을 사용합니다. 이 기능은 android.hardware.touchscreen.multitouch 기능의 상위 집합입니다.

이 기능을 사용하는 앱은 상위 기능인 android.hardware.touchscreen.multitouchandroid:required="false"로 선언하지 않는 경우 이 상위 기능도 사용함을 암시합니다.

USB 하드웨어 기능

android.hardware.usb.accessory
앱이 USB 기기로 작동하며 USB 호스트에 연결됩니다.
android.hardware.usb.host
앱이 기기에 연결된 USB 액세서리를 사용합니다. 기기는 USB 호스트 역할을 합니다.

Vulkan 하드웨어 기능

android.hardware.vulkan.compute
앱이 Vulkan 컴퓨팅 기능을 사용합니다. 이 기능은 앱에 하드웨어 가속 Vulkan 구현이 필요하다는 것을 나타냅니다. 기능 버전은 Vulkan 1.0 요구사항 이상으로 앱에 필요한 선택적 컴퓨팅 기능의 수준을 나타냅니다. 예를 들어 앱에 Vulkan 컴퓨팅 수준 0 지원이 필요하다면 다음과 같은 기능을 선언해야 합니다.
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
기능 버전에 관한 자세한 내용은 FEATURE_VULKAN_HARDWARE_COMPUTE를 참고하세요.
android.hardware.vulkan.level
앱이 Vulkan 수준 기능을 사용합니다. 이 기능은 앱에 하드웨어 가속 Vulkan 구현이 필요하다는 것을 나타냅니다. 기능 버전은 앱에 필요한 선택적 하드웨어 기능의 수준을 나타냅니다. 예를 들어 앱에 Vulkan 하드웨어 수준 0 지원이 필요하다면 다음과 같은 기능을 선언해야 합니다.
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
기능 버전에 관한 자세한 내용은 FEATURE_VULKAN_HARDWARE_LEVEL을 참고하세요.
android.hardware.vulkan.version
앱이 Vulkan을 사용합니다. 이 기능은 앱에 하드웨어 가속 Vulkan 구현이 필요하다는 것을 나타냅니다. 기능 버전은 앱에 필요한 Vulkan API 지원의 최소 버전을 나타냅니다. 예를 들어 앱에 Vulkan 1.0 지원이 필요하다면 다음과 같은 기능을 선언해야 합니다.
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
기능 버전에 관한 자세한 내용은 FEATURE_VULKAN_HARDWARE_VERSION을 참고하세요.

Wi-Fi 하드웨어 기능

android.hardware.wifi
앱이 기기에서 802.11 네트워킹 (Wi-Fi) 기능을 사용합니다.
android.hardware.wifi.direct
앱이 기기에서 Wi-Fi Direct 네트워킹 기능을 사용합니다.

소프트웨어 기능

이 섹션에서는 현재 플랫폼 버전 대부분이 지원하는 소프트웨어 기능을 소개합니다. 앱이 소프트웨어 기능을 사용하거나 필요로 함을 나타내려면 관련 값("android.software"로 시작)을 android:name 속성에서 선언합니다. 소프트웨어 기능을 선언할 때마다 개별 <uses-feature> 요소를 사용해야 합니다.

통신 소프트웨어 기능

android.software.sip
앱이 SIP(Session Initiation Protocol) 서비스를 사용합니다. SIP를 사용하는 앱은 화상 회의 및 채팅과 같은 인터넷 전화통신 작업을 지원할 수 있습니다.
android.software.sip.voip

앱이 SIP 기반 VoIP(Voice Over Internet Protocol) 서비스를 사용합니다. VoIP를 사용하는 앱은 양방향 화상 회의와 같은 실시간 인터넷 전화통신 작업을 지원할 수 있습니다.

이 기능을 사용하는 앱은 상위 기능인 android.software.sipandroid:required="false"로 선언하지 않는 경우 이 상위 기능도 사용함을 암시합니다.

android.software.webview
앱이 인터넷 콘텐츠를 표시합니다.

맞춤 입력 소프트웨어 기능

android.software.input_methods
앱이 개발자가 InputMethodService에서 정의하는 새로운 입력 방법을 사용합니다.

기기 관리 소프트웨어 기능

android.software.backup
앱이 백업을 처리하고 작업을 복원하는 로직을 포함합니다.
android.software.device_admin
앱이 기기 정책을 시행하기 위해 기기 관리자를 사용합니다.
android.software.managed_users
앱이 보조 사용자 및 관리 프로필을 지원합니다.
android.software.securely_removes_users
앱이 사용자 및 관련 데이터를 영구적으로 삭제할 수 있습니다.
android.software.verified_boot
앱이 다시 시작 작업 중에 기기 구성 변경 여부를 감지하는, 기기의 자체 검사 부팅 기능에서 도출된 결과를 처리하는 로직을 포함합니다.

미디어 소프트웨어 기능

android.software.midi
앱이 MIDI(Musical Instrument Digital Interface) 프로토콜을 사용하여 악기 또는 출력 사운드에 연결합니다.
android.software.print
앱이 기기에 표시된 문서를 인쇄하는 명령을 포함합니다.
android.software.leanback
앱이 Android TV 기기에서 실행되도록 설계되었습니다.
android.software.live_tv
앱이 생방송 텔레비전 프로그램을 스트리밍합니다.

화면 인터페이스 소프트웨어 기능

android.software.app_widgets
앱이 앱 위젯을 사용 또는 제공하고, 사용자가 앱 위젯을 삽입할 수 있는 홈 화면 또는 유사한 위치를 포함하는 기기에만 앱을 설치해야 합니다.
android.software.home_screen
앱이 기기의 홈 화면의 대체 항목으로 작동합니다.
android.software.live_wallpaper
앱이 애니메이션을 포함하는 배경화면을 사용하거나 제공합니다.

기능 요구사항을 암시하는 권한

일부 하드웨어 및 소프트웨어 기능 상수는 앱이 해당 API 뒤에서 사용할 수 있습니다. 이 때문에 일부 앱은 <uses-feature> 시스템을 사용하여 API가 필요하다고 선언하기 전에 API를 사용할 수도 있습니다.

이러한 앱이 실수로 제공되지 않도록 하기 위해 Google Play는 특정 하드웨어 관련 권한이 기본 하드웨어 기능이 기본적으로 필수 기능임을 나타낸다고 가정합니다. 예를 들어 블루투스를 사용하는 애플리케이션은 <uses-permission> 요소에서 BLUETOOTH 권한을 요청해야 합니다.

Google Play는 기존 앱에 권한을 선언하면 애플리케이션에서 기본 android.hardware.bluetooth 기능이 필요하고 이 기능에 따라 필터링을 설정함을 의미한다고 가정합니다. 표 2에는 <uses-feature> 요소에 선언된 것과 동일한 기능 요구사항을 암시하는 권한이 나열되어 있습니다.

선언된 android:required 속성을 비롯한 <uses-feature> 선언은 표 2의 권한이 암시하는 기능보다 항상 우선합니다. 이러한 권한의 경우 required 속성이 false로 설정된 <uses-feature> 요소에서 암시적 기능을 명시적으로 선언하여 이 기능에 기반한 필터링을 사용 중지할 수 있습니다.

예를 들어 CAMERA 권한에 기반한 필터링을 중지하려면 다음 <uses-feature> 선언을 매니페스트 파일에 추가합니다.

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

주의: 앱이 Android 5.0 (API 수준 21) 이상을 타겟팅하고 ACCESS_COARSE_LOCATION 또는 ACCESS_FINE_LOCATION 권한을 사용하여 각각 네트워크 또는 GPS에서 위치 업데이트를 수신하는 경우 앱이 android.hardware.location.network 또는 android.hardware.location.gps 하드웨어 기능을 사용한다는 점도 명시적으로 선언해야 합니다.

표 2. 기기 하드웨어 용도를 암시하는 기기 권한

카테고리 권한 암시된 기능 요구사항
블루투스 BLUETOOTH android.hardware.bluetooth

자세한 내용은 블루투스 기능에 관한 특별한 처리를 참고하세요.

BLUETOOTH_ADMIN android.hardware.bluetooth
카메라 CAMERA android.hardware.camera
android.hardware.camera.autofocus
위치 ACCESS_MOCK_LOCATION android.hardware.location
ACCESS_LOCATION_EXTRA_COMMANDS android.hardware.location
INSTALL_LOCATION_PROVIDER android.hardware.location
ACCESS_COARSE_LOCATION

android.hardware.location

android.hardware.location.network(대상 API 수준이 20 이하인 경우에만)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps(대상 API 수준이 20 이하인 경우에만)

마이크 RECORD_AUDIO android.hardware.microphone
전화 통신 CALL_PHONE android.hardware.telephony
CALL_PRIVILEGED android.hardware.telephony
MODIFY_PHONE_STATE android.hardware.telephony
PROCESS_OUTGOING_CALLS android.hardware.telephony
READ_SMS android.hardware.telephony
RECEIVE_SMS android.hardware.telephony
RECEIVE_MMS android.hardware.telephony
RECEIVE_WAP_PUSH android.hardware.telephony
SEND_SMS android.hardware.telephony
WRITE_APN_SETTINGS android.hardware.telephony
WRITE_SMS android.hardware.telephony
Wi-Fi ACCESS_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_MULTICAST_STATE android.hardware.wifi