Google Play 필터

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

Google Play의 필터링은 여러 유형의 앱 메타데이터 및 구성 설정을 기반으로 합니다. 여기에는 매니페스트 선언, 필수 라이브러리, 아키텍처 종속성, Google Play 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>

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

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

<supports-gl-texture>

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

기타 필터

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

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

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

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

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

정지된 애플리케이션은 다운로드 영역에 나타나더라도 사용자가 재설치하거나 업데이트할 수 없습니다.

가격 상태

모든 사용자가 유료 앱을 볼 수 있는 것은 아닙니다. 유료 앱을 표시하려면 Android 1.1 이상을 실행하는 기기가 유료 앱이 사용 가능한 국가에 있어야 합니다. 기기에 SIM 카드가 있는 경우 SIM 사업자가 유료 앱의 사용 가능 여부를 결정합니다. 기기에 SIM 카드가 없는 경우, 기기가 유료 앱을 사용할 수 있는 국가에 있는지를 판별하는 데 기기의 IP 주소가 사용됩니다.

대상 국가 지정

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

CPU 아키텍처(ABI)

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

복사 방지 애플리케이션

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

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

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

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

  • OpenGL 텍스처 압축 형식

    <supports-gl-texture> 요소를 사용하여.

  • 화면 크기(및 선택적 화면 밀도)

    <supports-screens> 또는 <compatible-screens> 요소를 사용하여.

  • API 레벨

    <uses-sdk> 요소를 사용하여.

  • CPU 아키텍처(ABI)

    특정 CPU 아키텍처(예: ARM EABI v7 또는 x86)를 대상으로 하는 Android NDK로 구축된 기본 라이브러리를 포함하여.

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

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

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

참고 항목

  1. Android 호환성
  2. 멀티 APK 지원