Google Play의 필터

사용자가 Google Play에서 다운로드할 앱을 검색하거나 탐색하면 애플리케이션이 기기와 호환되는지를 기준으로 결과가 필터링됩니다. 예를 들어, Google Play는 카메라가 필요한 앱을 카메라가 없는 기기에 표시하지 않습니다. 이러한 필터링을 통해 개발자가 앱 배포를 관리하고 사용자에게 최고의 경험을 보장할 수 있습니다.

Google Play의 필터링은 여러 유형의 앱 메타데이터 및 구성 설정을 기반으로 합니다. 여기에는 매니페스트 선언, 필수 라이브러리, 아키텍처 종속성, Google Play Developer Console에 설정된 배포 컨트롤(예: 대상 지역 지정, 가격 책정)이 포함됩니다.

Google Play 필터링은 부분적으로 매니페스트 선언 및 Android 프레임워크의 기타 요소를 기반으로 하지만, 실제 필터링 동작은 프레임워크와 별개이며 특정 API 레벨로 바인딩되지 않습니다. 이 문서는 Google Play에서 사용하는 현행 필터링 규칙을 설명합니다.

Google Play에서 필터 작동 방식

Google Play는 아래 설명된 필터 제한을 사용하여 Google Play 앱에서 애플리케이션을 탐색 또는 검색 중인 사용자에게 애플리케이션을 표시할지 여부를 판별합니다.

앱을 표시할지 여부를 판별할 때 Google Play는 기기의 하드웨어 및 소프트웨어 요구사항은 물론 통신사, 위치 및 기타 특성을 확인합니다. 그런 다음 이들을 애플리케이션의 매니페스트 파일 및 게시 세부정보에 명시된 제한 및 종속성과 비교합니다.

애플리케이션이 필터 규칙에 따라 기기와 호환되면 Google Play가 사용자에게 애플리케이션을 표시합니다. 그렇지 않은 경우 사용자가 Google Play 내에서 앱 ID를 직접 가리키는 딥 링크를 클릭하여 앱을 구체적으로 요청하더라도 Google Play가 검색 결과 및 카테고리 탐색에서 해당 앱을 숨깁니다.

앱에서 이용 가능한 모든 필터 조합을 사용할 수 있습니다. 예를 들어, 앱에서 minSdkVersion 요구사항을 "4"로 설정하고 smallScreens="false" 를 설정하면 앱을 Google Play에 업로드할 때 유럽 국가(통신사)만 대상으로 지정할 수 있습니다. 따라서 Google Play 필터는 이러한 세 가지 요구사항 중 일부가 일치하지 않는 기기에서 애플리케이션을 사용하지 못하게 합니다.

모든 필터링 제한은 애플리케이션의 버전과 연관되어 있고 버전에 따라 변경할 수 있습니다. 예를 들어, 사용자가 애플리케이션을 설치했는데 개발자가 사용자가 볼 수 없는 업데이트를 게시하면 사용자는 업데이트가 제공된다는 사실을 알지 못합니다.

Google Play 웹사이트에서 필터링

사용자가 Google Play 웹사이트를 탐색할 때 게시된 모든 애플리케이션을 볼 수 있습니다. Google Play 웹사이트는 애플리케이션 요구사항을 사용자가 등록한 각 기기와 비교하여 호환성을 확인하고, 호환되는 기기에만 애플리케이션을 설치할 수 있도록 합니다.

앱 매니페스트를 기반으로 필터링

매니페스트 파일의 모든 요소가 필터링을 트리거할 수 있는 것은 아니지만 애플리케이션의 매니페스트 파일 AndroidManifest.xml 내의 요소가 대부분의 필터를 트리거합니다. 표 1에서는 필터링을 트리거하는 데 사용해야 하는 요소를 나열하고 각 요소의 필터링이 어떻게 작동하는지 설명합니다.

표 1. Google Play에서 필터링을 트리거하는 매니페스트 요소

매니페스트 요소 필터 이름 작동 방식
<supports-screens> 화면 크기

애플리케이션이 <supports-screens> 요소의 특성을 설정하여 지원할 수 있는 화면 크기를 나타냅니다. 애플리케이션이 게시되면 Google Play는 해당 특성을 사용하여 기기의 화면 크기에 따라 애플리케이션을 사용자에게 표시할지 여부를 판별합니다.

일반적으로 Google Play는 기기의 플랫폼이 작은 레이아웃을 큰 화면에 적용할 수 있지만 큰 레이아웃을 작은 화면에 적용할 수는 없다고 가정합니다. 따라서 애플리케이션이 "보통" 화면 크기만 지원하도록 선언하면, Google Play가 애플리케이션을 보통 화면 기기와 대형 화면 기기에서 사용할 수 있지만 소형 화면 기기에서는 사용할 수 없도록 필터링합니다.

애플리케이션이 <supports-screens>에 대한 특성을 선언하지 않은 경우 Google Play는 해당 특성에 대해 기본값을 사용합니다. 기본값은 API 레벨에 따라 다릅니다. 구체적인 사항은 다음과 같습니다.

  • android: minSdkVersion 또는 android: targetSdkVersion을 3 이하로 설정한 애플리케이션의 경우 <supports-screens> 요소 자체가 정의되지 않고 사용할 수 있는 특성이 없습니다. 이 경우 Google Play는 해당 애플리케이션이 보통 크기 화면에 맞게 개발된 것으로 가정하고 보통 크기 이상의 화면을 가진 기기에 애플리케이션을 표시합니다.

  • android: minSdkVersion 또는 android: targetSdkVersion을 4 이상으로 설정한 경우 모든 특성의 기본값은 "true"입니다. 이러한 방식으로 해당 애플리케이션이 기본적으로 모든 화면 크기를 지원하는 것으로 간주됩니다.

예 1
매니페스트가 <uses-sdk android:minSdkVersion="3">을 선언하고 <supports-screens> 요소를 포함하지 않습니다. 결과: 다른 필터가 적용된 경우를 제외하고 Google Play가 소형 화면 기기 사용자에게는 앱을 표시하지 않지만, 보통 및 대형 화면 기기 사용자에게는 표시합니다.

예 2
매니페스트가 <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4">를 선언하고 <supports-screens> 요소를 포함하지 않습니다. 결과: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 기기 사용자에게 앱을 표시합니다.

예 3
매니페스트가 <uses-sdk android:minSdkVersion="4">를 선언하고 <supports-screens> 요소를 포함하지 않습니다. 결과: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 사용자에게 앱을 표시합니다.

애플리케이션에서 화면 크기 지원을 선언하는 자세한 방법은 <supports-screens>다중 화면 지원을 참조하세요.

<uses-configuration> 기기 구성:
키보드, 탐색, 터치 스크린

애플리케이션이 특정 하드웨어 기능을 요청한 경우 Google Play는 요청한 하드웨어를 가진 기기에만 앱을 표시합니다.

예 1
매니페스트가 <uses-configuration android:reqFiveWayNav="true" />를 포함하고 사용자가 5방향 탐색 컨트롤이 없는 기기에서 앱을 검색 중입니다. 결과: Google Play가 사용자에게 앱을 표시하지 않습니다.

예 2
매니페스트가 <uses-configuration> 요소를 포함하지 않습니다. 결과: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 사용자에게 앱을 표시합니다.

자세한 내용은 <uses-configuration>을 참조하세요.

<uses-feature> 기기 기능
(name)

애플리케이션이 기기에 특정 기기 기능을 요구할 수 있습니다. 이 기능은 Android 2.0(API 레벨 5)에서 도입되었습니다.

예 1
매니페스트가 <uses-feature android:name="android.hardware.sensor.light" />를 포함하고 사용자가 라이트 센서가 없는 기기에서 앱을 검색 중입니다. 결과: Google Play가 사용자에게 앱을 표시하지 않습니다.

예 2
매니페스트가 <uses-feature> 요소를 포함하지 않습니다. 결과: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 사용자에게 앱을 표시합니다.

자세한 내용은 <uses-feature> 를 참조하세요.

내재된 기능을 기준으로 필터링: 경우에 따라 Google Play는 <uses-permission> 요소를 통해 요청된 권한을 <uses-feature> 요소에 선언된 것과 동등한 기능 요구사항으로 해석합니다. 아래 <uses-permission>을 참조하세요.

OpenGL-ES 버전
(openGlEsVersion)

애플리케이션이 <uses-feature android:openGlEsVersion="int"> 특성을 사용하여 기기가 특정 OpenGL-ES 버전을 지원하도록 요구할 수 있습니다.

예 1
앱이 매니페스트에서 openGlEsVersion을 여러 번 지정하는 방식으로 여러 OpenGL-ES 버전을 요청합니다. 결과: Google Play는 앱이 지정된 버전 중 가장 높은 버전을 요구하는 것으로 간주합니다.

예 2
앱이 OpenGL-ES 버전 1.1을 요청하고 사용자가 OpenGL-ES 버전 2.0을 지원하는 기기에서 앱을 검색 중입니다. 결과: 다른 필터가 적용된 경우를 제외하고 Google Play가 사용자에게 앱을 표시합니다. 기기가 OpenGL-ES 버전 X를 지원하는 것으로 보고하면 Google Play는 해당 기기가 X 이전 버전도 모두 지원하는 것으로 간주합니다.

예 3
사용자가 OpenGL-ES 버전을 보고하지 않은 기기(예: Android 1.5 이하 버전을 실행하는 기기)에서 앱을 검색 중입니다. 결과: Google Play는 해당 기기가 OpenGL-ES 1.0만 지원하는 것으로 간주합니다. Google Play가 openGlEsVersion을 지정하지 않은 사용자 앱이나 1.0 이상의 OpenGL-ES 버전을 지정하지 않은 앱만 표시합니다.

예 4
매니페스트가 openGlEsVersion을 지정하지 않습니다. 결과: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 사용자에게 앱을 표시합니다.

자세한 내용은 <uses-feature>를 참조하세요.

<uses-library> 소프트웨어 라이브러리

애플리케이션이 기기에 특정 공유 라이브러리를 요구할 수 있습니다.

예 1
앱이 com.google.android.maps 라이브러리를 요구하고 사용자가 com.google.android.maps 라이브러리가 없는 기기에서 앱을 검색 중입니다. 결과: Google Play가 사용자에게 앱을 표시하지 않습니다.

예 2
매니페스트가 <uses-library> 요소를 포함하지 않습니다. 결과: 다른 필터가 적용된 경우를 제외하고 Google Play가 모든 사용자에게 앱을 표시합니다.

자세한 내용은 <uses-library>를 참조하세요.

<uses-permission>   엄격히 말하자면 Google Play는 <uses-permission> 요소를 기준으로 필터링하지 않습니다. 하지만 Google Play가 해당 요소를 읽고 <uses-feature> 요소에서 올바로 선언되지 않았을 수도 있는 하드웨어 기능 요구사항이 애플리케이션에 있는지 판별합니다. 예를 들어, 애플리케이션이 CAMERA 권한을 요청하지만 android.hardware.camera에 대해 <uses-feature> 요소를 선언하지 않은 경우 Google Play는 애플리케이션이 카메라를 요구하는 것으로 간주하여 카메라를 제공하지 않는 기기의 사용자에게 애플리케이션을 표시하지 않습니다.

일반적으로 애플리케이션이 하드웨어 관련 권한을 요청하면 Google Play는 <uses-feature> 선언에 해당하는 기능이 없더라도 애플리케이션이 기본 하드웨어 기능을 요구하는 것으로 간주합니다. 그런 다음 <uses-feature> 선언에 내재된 기능을 기준으로 필터링을 설정합니다.

하드웨어 기능을 내재하는 권한 목록은 <uses-feature> 요소에 대한 문서를 참조하세요.

<uses-sdk> 최소 프레임워크 버전(minSdkVersion)

애플리케이션이 최소 API 레벨을 요구할 수 있습니다.

예 1
매니페스트가 <uses-sdk android:minSdkVersion="3">을 포함하고 앱이 API 레벨 3에 도입된 API를 사용합니다. 사용자가 API 레벨 2를 가진 기기에서 앱을 검색 중입니다. 결과: Google Play가 사용자에게 앱을 표시하지 않습니다.

예 2
매니페스트가 minSdkVersion을 포함하지 않고 앱이 API 레벨 3에 도입된 API를 사용합니다. 사용자가 API 레벨 2를 가진 기기에서 앱을 검색 중입니다. 결과: Google Play는 minSdkVersion이 "1"이고 앱이 모든 Android 버전과 호환되는 것으로 간주합니다. Google Play가 사용자에게 앱을 표시하고 사용자가 앱을 다운로드하는 것을 허용합니다. 앱이 런타임에 작동 중단됩니다.

이 두 번째 시나리오를 피하려면 항상 minSdkVersion을 선언하는 것이 좋습니다. 자세한 내용은 android:minSdkVersion을 참조하세요.

최대 프레임워크 버전(maxSdkVersion)

사용이 중단되었습니다. Android 2.1 이상에서는 maxSdkVersion이 앱의 매니페스트에 설정된 경우 maxSdkVersion 특성을 검사하거나 적용하지 않고 SDK가 컴파일하지 않습니다. 기기가 이미 maxSdkVersion으로 컴파일된 경우 Google Play가 이를 반영하고 필터링에 사용합니다.

maxSdkVersion 선언은 권장되지 않습니다. 자세한 내용은 android:maxSdkVersion을 참조하세요.

고급 매니페스트 필터

Google Play는 표 1의 매니페스트 요소뿐만 아니라 표 2의 고급 매니페스트 요소를 기준으로 애플리케이션을 필터링할 수도 있습니다.

고급 매니페스트 요소와 이들이 트리거하는 필터링은 예외적인 사례에만 적용됩니다. 이들은 애플리케이션 배포에서 엄격한 제어가 필요한 특정 유형의 고성능 게임 및 유사 애플리케이션용으로 고안되었습니다. 대부분의 애플리케이션은 이러한 필터를 사용하면 안 됩니다.

표 2. Google Play 필터링용 고급 매니페스트 요소

매니페스트 요소요약
<compatible-screens>

Google Play가 기기 화면 크기와 밀도가 <compatible-screens> 요소에서 <screen> 요소에 의해 선언된 화면 구성과 일치하지 않는 경우에 애플리케이션을 필터링합니다.

주의: 일반적으로 이 매니페스트 요소를 사용하면 안 됩니다. 이 요소를 사용하면 목록에 없는 화면 크기와 밀도의 조합을 모두 제외시켜 애플리케이션의 잠재적 사용자 기반이 현저히 줄어들 수 있습니다. 대신 위의 표 1에 나오는 <supports-screens> 매니페스트 요소를 사용하여 대체 리소스로 고려하지 않은 화면 구성에 대해 화면 호환성 모드를 활성화해야 합니다.

<supports-gl-texture>

Google Play가 애플리케이션에서 지원되는 하나 이상의 GL 텍스처 압축 형식이 기기에서도 지원되는 경우를 제외하고 애플리케이션을 필터링합니다.

기타 필터

Google Play는 아래 표에 설명된 것처럼 다른 애플리케이션 특성을 사용하여 주어진 기기에서 특정 사용자에 대해 애플리케이션을 표시할지 또는 숨길지 판별합니다.

표 3. Google Play에서 필터링에 영향을 주는 애플리케이션 및 게시 특성

필터 이름 작동 방식
게시 상태

게시된 애플리케이션만 Google Play 내의 검색 및 탐색에 나타납니다.

앱이 게시되지 않은 경우라도 사용자가 구입, 설치 또는 최근에 제거한 앱 중에 다운로드 영역에서 볼 수 있는 앱은 설치할 수 있습니다.

애플리케이션이 일시 중단된 경우 다운로드 영역에 나타나더라도 사용자가 다시 설치하거나 업데이트할 수 없습니다.

가격 책정 상태

모든 사용자가 유료 앱을 볼 수 있는 것은 아닙니다. 유료 앱을 표시하려면 SIM 카드가 있고 Android 1.1 이상을 실행하는 기기가 유료 앱을 사용할 수 있는 (SIM 통신사가 지정한) 국가에 있어야 합니다.

대상 국가 지정

앱을 Google Play에 업로드할 때 Pricing and Distribution에서 앱을 배포할 국가를 선택할 수 있습니다. 그러면 선택한 국가에서만 앱을 사용할 수 있게 됩니다.

CPU 아키텍처(ABI)

특정 CPU 아키텍처(예: ARM EABI v7 또는 x86)를 대상으로 하는 네이티브 라이브러리를 포함한 앱은 해당 아키텍처를 지원하는 기기에만 표시됩니다. NDK 및 네이티브 라이브러리 사용에 대한 자세한 내용은 Android NDK란?을 참조하세요.

복사 방지 애플리케이션

Google Play는 Developer Console에서 더 이상 복사 방지 기능을 지원하지 않으며 이를 기준으로 앱을 필터링하지 않습니다. 앱의 보안을 유지하려면 대신 애플리케이션 라이선싱을 사용하세요. 자세한 내용은 복사 방지 대안을 참조하세요.

여러 필터를 사용하여 다중 APK 게시

일부 특정 Google Play 필터는 서로 다른 기기 구성에 서로 다른 APK를 제공하기 위해 동일한 애플리케이션에 대해 다중 APK 게시를 허용합니다. 예를 들어, 고화질 그래픽 자산을 사용하는 동영상 게임을 제작 중인 경우 각각 서로 다른 텍스처 압축 형식을 지원하는 2개의 APK를 생성하고 싶은 경우가 있습니다. 이러한 방식으로 각 기기 구성에 필요한 텍스처만 포함하여 APK 파일의 크기를 줄일 수 있습니다. Google Play는 각 기기의 텍스처 압축 형식 지원에 따라 해당 기기를 지원하도록 선언한 APK를 제공합니다.

현재 Google Play는 각 APK가 다음 구성에 따라 서로 다른 필터를 제공하는 경우에만 동일한 애플리케이션에 대해 다중 APK 게시를 허용합니다.

다른 모든 필터는 계속 평소와 동일하게 작동하지만 이 4개의 필터는 Google Play의 동일한 애플리케이션 목록 내에서 APK를 서로 구별할 수 있는 유일한 필터입니다. 예를 들어, 기기에 카메라가 있는지 여부에 따라서만 APK가 달라지는 경우 동일한 애플리케이션에 대해 다중 APK를 게시할 수 없습니다.

주의: 동일한 애플리케이션에 대해 다중 APK 게시는 고급 기능으로 간주되며 대부분의 애플리케이션은 광범위한 기기 구성을 지원하는 단일 APK만 게시해야 합니다. 다중 APK를 게시하려면 필터 내에서 특정 규칙을 따라야 하며 각 구성에 대해 적절한 업데이트 경로를 보장하기 위해 각 APK의 버전 코드에 특별한 주의를 기울여야 합니다.

Google Play에서 다중 APK를 게시하는 자세한 방법은 다중 APK 지원을 참조하세요.