조건부 제공 구성

조건부 제공을 사용하면 앱 설치 중에 기능 모듈을 자동으로 다운로드하기 위한 특정한 기기 설정 요구사항을 지정할 수 있습니다. 예를 들어 증강 현실(AR)을 지원하는 기기에서만 앱 설치 시에 AR을 제공하도록 하는 기능이 포함된 기능 모듈을 구성할 수 있습니다.

이 제공 메커니즘을 통해 현재 다음과 같은 기기 설정을 기반으로 앱 설치 시 모듈의 다운로드를 관리할 수 있습니다.

기기가 지정된 모든 요구사항을 충족하지 않으면 모듈이 앱 설치 시에 다운로드되지 않습니다. 그러나 앱에서 나중에 Play Core SDK를 사용하여 주문형으로 모듈을 다운로드하도록 요청할 수 있습니다.

시작하기 전에 Android 스튜디오 3.5 이상을 사용 중인지 확인합니다. 다음 섹션에서는 기능 모듈에 조건부 제공 지원 기능을 추가하는 방법을 보여줍니다.

조건부 제공 옵션을 사용하여 새 모듈 추가

조건부 제공 옵션을 사용하여 새 기능 모듈을 만드는 가장 쉬운 방법은 다음과 같이 New Module 마법사를 사용하는 것입니다.

  1. New Module 대화상자를 열려면 메뉴 바에서 File > New > New Module을 선택합니다.
  2. New Module 대화상자에서 Dynamic Feature Module을 선택하고 Next를 클릭합니다.
  3. 평소처럼 모듈을 구성하고 Next를 클릭합니다.
  4. Module Download Options 섹션에서 다음을 완료합니다.

    1. 최대 50자(영문 기준)를 사용하여 Module title을 지정합니다. 예를 들어 사용자가 모듈을 다운로드하려는지 여부를 확인할 때 플랫폼은 이 제목을 사용하여 모듈을 식별합니다. 이런 이유로 앱의 기본 모듈은 번역이 가능한 문자열 리소스로 된 모듈 제목을 포함해야 합니다. Android 스튜디오를 사용하여 모듈을 만들 때 IDE는 문자열 리소스를 기본 모듈에 추가하고 다음 항목을 기능 모듈의 매니페스트에 삽입합니다.

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. Install-time inclusion 아래의 드롭다운 메뉴에서 Only include module at app install for devices with specified features를 선택합니다. 이렇게 하면 기기 기능 또는 국가와 같이 지정할 수 있는 특정 구성이 있는 기기에서만 앱 설치 시 앱과 함께 포함되는 모듈을 생성합니다. Android 스튜디오는 모듈의 매니페스트에 다음을 삽입하여 선택사항을 반영합니다.

      <dist:module ... >
        <dist:delivery>
            <dist:install-time>
                <dist:conditions>
                    <!-- If you specify conditions, as described in the steps
                         below, the IDE includes them here. -->
                </dist:conditions>
            </dist:install-time>
        </dist:delivery>
      </dist:module>
      
    3. 특정 국가 또는 최소 API 수준으로 모듈의 자동 다운로드를 제한하려면 Finish를 클릭하여 모듈 생성을 완료한 후 국가를 기반으로 조건을 지정하거나 최소 API 수준을 기반으로 조건을 지정하는 방법에 관한 섹션을 참고하세요. 또는 + device feature를 클릭하여 기기에서 설치 시에 모듈을 다운로드하는 데 필요한 기능을 추가합니다.

    4. device-feature 옆의 드롭다운 메뉴에서 다음 옵션 중 하나를 선택하고 값을 지정합니다.

      • Name: 기기에서 설치 시에 모듈을 다운로드하는 데 필요한 하드웨어 또는 소프트웨어 기능을 지정할 수 있습니다. 조건부 제공 옵션에서 지원하는 기능은 PackageManager에 의해 FEATURE_* 상수로 나열된 기능과 같습니다. 이 옵션을 선택하면 드롭다운 옆의 필드에 기능의 상수 값(예: 'bluetooth') 일부를 입력하기 시작할 때 표시되는 추천 중 하나를 선택할 수 있습니다.
      • OpenGL ES Version: 기기에서 설치 시에 모듈을 다운로드하는 데 필요한 OpenGL ES의 버전을 지정할 수 있습니다. 이 옵션을 선택하면 드롭다운 옆의 필드에 버전(예: '0x00030001')을 입력하기 시작할 때 표시되는 추천 중 하나를 선택할 수 있습니다.
    5. 사용 가능한 기기 기능을 기반으로 여러 조건을 추가하려면 지정하려는 각 기기 기능 조건에 대해 + device feature를 클릭합니다.

    6. 이 모듈을 Android 4.4(API 수준 20) 이하를 실행하는 기기에서 사용하고 다중 APK에 포함하려면 Fusing 옆에 있는 체크박스를 선택합니다. 즉, 이 모듈에 대해 주문형 동작을 사용 설정하고 융합을 중지하여 분할 APK의 다운로드 및 설치를 지원하지 않는 기기에서는 모듈을 제외할 수 있습니다. Android 스튜디오는 모듈의 매니페스트에 다음을 삽입하여 선택사항을 반영합니다.

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  5. 모듈 다운로드 옵션 구성이 완료되면 Finish를 클릭합니다.

Android Gradle 플러그인은 동적 기능 모듈에서 린트의 실행을 지원하지 않습니다. 상응하는 애플리케이션 모듈에서 린트를 실행하면 동적 기능 모듈에서 린트가 실행되고 앱의 린트 보고서에 모든 문제가 포함됩니다.

기존의 기능 모듈에 조건부 제공 옵션 추가

모듈의 매니페스트를 통해 쉽게 기존의 기능 모듈에 조건부 제공 옵션을 추가할 수 있습니다. 그러나 먼저, 이미 사용 설정한 다른 제공 옵션과 조건부 제공 옵션의 호환성에 관해 알아봐야 합니다.

시작하려면 먼저, 매니페스트를 새 <dist:delivery> 요소로 이전해야 합니다. 아래의 코드 스니펫은 이전 문법의 예를 보여줍니다.

<!-- This is the old syntax. -->
<dist:module
  dist:title="@string/feature_title" dist:onDemand="true">
  <dist:fusing dist:include="true"/>
</dist:module>

위의 제공 옵션은 이제 다음과 같이 지정됩니다.

<dist:module
  dist:title="@string/feature_title">
  <dist:delivery>
      <dist:on-demand/>
  </dist:delivery>
  <dist:fusing dist:include="true"/>
</dist:module>

그런 다음, 아래와 같이 기기 기능을 기반으로 조건부 제공 옵션을 포함할 수 있습니다.

<dist:module
    dist:title="@string/feature_title">
    <dist:delivery>
      <dist:on-demand/>
      <dist:install-time>
        <dist:conditions>
          <!-- Requires that the device support AR to download the module at
          app install-time.  -->
          <dist:device-feature dist:name="android.hardware.camera.ar"/>
        </dist:conditions>
      </dist:install-time>
    </dist:delivery>
    <dist:fusing dist:include="true"/>
</dist:module>

아래 섹션에서는 기타 조건부 제공 옵션(예: 국가별 또는 최소 API 수준별)을 설명합니다.

다른 모듈 다운로드 옵션과의 호환성

기능 모듈은 각 기능이 사용자의 기기에 제공되는 방식을 구성하는 여러 가지 옵션을 제공하므로 조건부 제공 옵션이 어떻게 다른 설정의 영향을 받는지 이해하는 것이 중요합니다. 다음 표에는 조건부 제공 옵션과 다른 모듈 다운로드 옵션의 호환성이 요약되어 있습니다.

모듈 다운로드 옵션 조건부 제공과의 호환성
융합(<dist:fusing dist:include="true"/>) 모듈에서 이 옵션을 true로 설정하면 Google Play에서 API 수준 19 이하를 실행하는 기기에 앱을 배포할 때 지정된 조건부 제공 옵션을 사용하지 않습니다. 즉, API 수준 19 이하를 실행하는 기기의 경우 설치 시에 융합을 사용 설정하는 기능 모듈이 항상 포함됩니다.
인스턴트 지원(<dist:module dist:instant="true"/>) 인스턴트 지원 기능 모듈의 경우 조건부 제공 옵션이 지원되지 않습니다.
주문형(<dist:on-demand/>) 기본적으로 조건부 제공 옵션을 지정하면 주문형으로도 모듈을 사용할 수 있습니다.

국가를 기반으로 조건 지정

조건부 제공 옵션을 사용하면 앱 설치 시에 모듈 다운로드에서 제외(또는 포함)할 국가를 지정할 수도 있습니다. 예를 들어 모듈에서 특정 지역에서는 사용할 수 없는 결제 수단을 구현하는 경우 이 조건을 지정하면 유용할 수 있습니다.

이 컨텍스트에서 기기 국가는 일반적으로 Google Play 계정에 등록된 사용자의 청구서 수신 주소에 따라 결정됩니다.

모듈의 국가를 지정하려면 기능 모듈의 매니페스트에 다음을 포함합니다.

<dist:conditions>
   <!-- Set to "true" to specify countries to exclude from downloading
   this module at app install-time. By default, modules are available
   for download to all user countries. -->
  <dist:user-countries dist:exclude="true">
    <!-- Specifies the two-letter  CLDR country code for regions that should
    not download the module at app install-time. -->
    <dist:country dist:code="CN"/>
    <dist:country dist:code="HK"/>
  </dist:user-countries>
</dist:conditions>

API 수준의 조건 지정

기능 모듈이 특정 버전의 Android 플랫폼에서만 사용 가능한 API에 종속된다면 기기의 API 수준을 기반으로 조건을 지정하는 것이 유용할 수 있습니다.

최소 또는 최대 기기 API 수준을 기반으로 조건을 설정하려면 기능 모듈의 매니페스트에 다음을 포함합니다.

<dist:conditions>
    <!-- Specifies the minimum API level that the device must satisfy
         in order to download your module at app install-time. The API level you
         specify must be greater or equal to the module's own minSdkVersion. -->
   <dist:min-sdk dist:value="21"/>
    <!-- Specifies the maximum API level that the device cannot exceed
         in order to download your module at app install-time. The API level you
         specify must be less than or equal to the module's own maxSdkVersion. -->
   <dist:max-sdk dist:value="24"/>
</dist:conditions>