6월 3일의 ⁠#Android11: 베타 버전 출시 행사에 참여하세요.

제한된 화면 지원 선언

모든 화면 크기와 밀도에 맞게 앱을 디자인하는 것이 좋지만 여전히 앱에서 특정 화면 구성을 지원하지 않게 할 수도 있습니다. 지원하지 않게 하려면 이 페이지에 설명된 대로 Android에서 앱의 크기를 조정할 수 있는 범위를 제한하거나 앱을 설치할 수 있는 기기도 제한할 수 있습니다.

앱을 특정 화면으로 제한하기 전에 여러 화면을 지원하는 모든 기법을 이해하고 이를 최대한 구현해야 합니다.

다양한 화면에 맞는 개별 APK 게시

모든 화면 구성을 지원하는 단일 APK를 빌드하는 것이 적절하지 않으면 Google Play에서 동일한 앱 등록정보에 맞는 여러 APK를 게시할 수 있습니다. 이 기능을 사용하면 Google Play 스토어에서 별도의 목록을 만들지 않고 manifest 파일에 선언된 대로 각각 다른 화면 구성 조합을 지원하는 별도의 APK를 제공할 수 있습니다.

예를 들어 앱의 핸드셋 버전과 태블릿 버전을 모두 게시하려고 하지만 두 화면 크기에 하나의 APK를 사용할 수 없으면 같은 앱 등록정보에 두 개의 APK를 게시할 수 있습니다. 기기의 화면 구성에 따라 Google Play에서 각 기기 화면 크기와 일치하는 APK를 다운로드합니다.

자세한 내용은 화면 크기에 따라 여러 APK 만들기를 참조하세요.

최대 가로 세로 비율 선언

최대한 많은 기기를 지원하려면 콘텐츠와 제어가 잘 보이고 체계적으로 표시되도록 앱에서 레이아웃을 동적으로 조정해야 합니다.

대부분의 앱은 사용자가 멀티 윈도우 모드에서 실행할 수 있도록 크기 조절도 가능해야 합니다. 분할 화면 및 자유형 모드에서 크기 조절이 가능한 활동을 실행하고 측면 또는 모서리를 드래그하여 활동 크기를 변경할 수 있습니다.

멀티 윈도우 모드는 Android 7.0(API 레벨 24) 이상에서 실행되는 모든 앱에서 사용할 수 있으며 앱은 기본적으로 크기를 조절할 수 있습니다. 전체 앱 또는 특정 활동의 android:resizeableActivity true 속성을 명시적으로 설정할 수도 있습니다.

앱 또는 활동을 멀티 윈도우 모드에서 실행하지 않으려면 android:resizeableActivity false를 설정합니다. 그러면 앱이 항상 전체 화면으로 표시됩니다. Android OS 레벨에 따라 시스템에서 이 작업 방식을 제어합니다.

  • 앱에서 Android 8.0(API 레벨 26) 이상을 타겟팅하면 레이아웃에 따라 전체 화면을 채웁니다.
  • 앱에서 Android 7.1(API 레벨 25) 이하를 타겟팅하면 시스템에서 앱 인터페이스의 크기를 가로 세로 비율이 16:9(약 1.86)인 창으로 제한합니다. 앱이 화면 가로 세로 비율이 더 큰 기기에서 실행되면 앱이 16.9 레터박스에 표시되며 화면의 일부는 사용되지 않은 상태로 남습니다.

임의의 큰 가로 세로 비율에 맞게 앱 레이아웃을 조정할 수 없으면 최대 가로 세로 비율을 설정하여 모든 Android OS 레벨에서 명시적으로 레터박스를 적용할 수 있습니다. 2.4(12:5)의 비율을 사용하는 것이 좋습니다. 앱이 사용자가 지정한 비율보다 가로 세로 비율이 큰 기기에서 실행되면 레터박스로 표시됩니다. Wear OS 기기에는 최소 1.0, 다른 기기에는 최소 1.33의 값을 선택해야 합니다. 비율을 이 제한보다 작게 지정하면 위에서 설명한 대로 OS 레벨에 따라 앱의 가로 세로 비율이 제한됩니다.

Android 8.0(API 레벨 26) 이상에 최대 가로 세로 비율을 설정하려면 <activity> 태그에서 android:MaxAspectRatio를 사용하여 최대 비율을 선언합니다. 다음 예에서는 최대 가로 세로 비율을 2.4로 선언하는 방법을 보여줍니다.

<!-- Render on full screen up to screen aspect ratio of 2.4 -->
    <!-- Use a letterbox on screens larger than 2.4 -->
    <activity android:maxAspectRatio="2.4">
     ...
    </activity>
    

Android 7.1 이하에서 다음과 같이 android.max_aspect라는 <meta-data> 요소를 <application> 요소에 추가합니다.

<!-- Render on full screen up to screen aspect ratio of 2.4 -->
    <!-- Use a letterbox on screens larger than 2.4 -->
    <meta-data android:name="android.max_aspect" android:value="2.4" />
    

최대 가로 세로 비율을 설정하면 android:resizeableActivity false도 설정해야 합니다. 설정하지 않으면 최대 가로 세로 비율이 적용되지 않습니다.

최대 화면 크기 선언

다른 화면 크기를 지원하도록 앱을 완벽하게 최적화하지 않아도 Android에서는 여전히 큰 화면에 맞게 대부분의 앱을 확장할 수 있습니다. 따라서 최대 화면 크기를 선언할 필요가 거의 없습니다.

화면 크기에 따른 여러 APK를 만들기로 결정하면 APK를 작은 화면으로만 제한할 필요가 없습니다. 왜냐하면 대형 화면에 맞게 최적화된 APK에는 더 큰 versionCode가 있으므로, Google Play에서 화면이 큰 기기에 항상 이 APK를 제공합니다.

하지만 Android가 대형 화면에 맞게 앱의 크기를 조절하는 방식에 여전히 만족하지 않으면 <supports-screens> manifest 태그에 largestWidthLimitDp 속성을 지정하여 특정 너비를 초과하여 크기를 조절하지 못하게 설정할 수 있습니다. 그런 다음 레이아웃의 크기를 조절하는 대신 Android에서 화면 호환 모드를 사용 설정하여, 앱에서 지원하는 가장 큰 크기로 레이아웃을 그린 다음 화면을 채울 수 있도록 모든 픽셀을 확장할 수 있습니다.

태블릿 또는 TV 전용으로 앱 제한

<supports-screens> manifest 요소를 사용하여 핸드셋 기기에서 앱을 다운로드하지 못하게 할 수 있습니다.

예를 들어 다음은 대형 및 초대형 화면에서만 앱을 설치하도록 선언합니다.

<manifest ... >
        <supports-screens android:smallScreens="false"
                          android:normalScreens="false"
                          android:largeScreens="true"
                          android:xlargeScreens="true"/>
        ...
    </manifest>
    

특정 크기 및 밀도로만 앱 제한

<compatible-screens> manifest 요소를 사용하여 앱에서 지원하는 정확한 화면 크기와 밀도를 정의할 수 있습니다. 지정하지 않은 크기와 밀도 조합은 앱이 호환되지 않는 화면 구성으로 간주되므로 이 요소는 사용하지 않는 것이 좋습니다. 따라서 이 요소를 사용하면 앱에서 실제로 지원할 수 있는 여러 기기에서 앱을 쉽게 차단할 수 있습니다.

<compatible-screens> 요소에는 하나 이상의 <screen> 요소가 있어야 합니다. 각 <screen> 요소를 통해서는 android:screenSizeandroid:screenDensity 속성을 모두 사용하여 앱이 호환되는 화면 구성을 지정합니다. 개별 화면 구성을 지정하려면 각 <screen> 요소에 두 속성이 모두 포함되어야 합니다. 속성 중 하나가 누락되면 요소가 무효화됩니다(Google Play와 같은 외부 서비스에서 무시함).

앱이 소형 및 일반 화면 크기와 일부 화면 밀도와만 호환되면 manifest 항목은 다음과 같습니다.

<manifest ... >
        <compatible-screens>
            <!-- all small size screens -->
            <screen android:screenSize="small" android:screenDensity="ldpi" />
            <screen android:screenSize="small" android:screenDensity="mdpi" />
            <screen android:screenSize="small" android:screenDensity="hdpi" />
            <screen android:screenSize="small" android:screenDensity="xhdpi" />
            <!-- all normal size screens -->
            <screen android:screenSize="normal" android:screenDensity="ldpi" />
            <screen android:screenSize="normal" android:screenDensity="mdpi" />
            <screen android:screenSize="normal" android:screenDensity="hdpi" />
            <screen android:screenSize="normal" android:screenDensity="xhdpi" />
        </compatible-screens>
        ...
        <application ... >
            ...
        <application>
    </manifest>
    

명시적으로 여기에 선언되지 않은 크기와 밀도 조합은 앱 설치에서 제한됩니다.