Android App Bundle을 지원하기 위해 인스턴트 앱 이전

지원 중단된 기능 Android Gradle 플러그인(com.android.feature)을 Android 인스턴트 앱 모듈에 아직 사용하고 있다면 기본 앱 플러그인(com.android.application) 및 동적 기능 플러그인(com.android.dynamic-feature)을 사용하도록 이전해야 합니다.

Android Gradle 플러그인 3.3.0 이상 버전에서는 기본 앱 플러그인에 인스턴트 환경 지원 기능이 포함됩니다. 즉, 기본 앱 모듈이 인스턴트 환경이 되기 위한 요구사항을 충족하면 자동으로 혜택을 받습니다. 그런 다음 동적 기능 플러그인을 사용하여 인스턴트 환경으로 사용자가 필요할 때 다운로드할 수 있는 추가 기능을 포함할 수 있습니다. 이 설정을 사용하면 하나의 프로젝트에서 설치된 앱 및 인스턴트 앱 환경을 더 쉽게 지원할 수 있으며 Android App Bundle을 사용하여 게시할 수 있는 이점이 있습니다.

다음 표에 이전할 플러그인이 자세히 설명되어 있습니다.

모듈 설명 이전 플러그인 현재 플러그인
설치된 앱 또는 인스턴트 앱 환경의 기본 코드, 리소스, 기능이 포함된 모듈입니다. com.android.feature (baseFeature = true 사용) com.android.application

참고: 이 모듈에는 앱을 Android App Bundle 또는 APK로 빌드하고 패키징하는 데 필요한 모든 매니페스트 및 서명 정보가 포함됩니다.

사용자가 필요할 때 다운로드할 수 있는 모듈식 추가 기능입니다. com.android.feature com.android.dynamic-feature(모듈의 매니페스트에 dist:instant="true"dist:onDemand="false" 포함)
설치된 앱 버전에만 사용할 수 있는 기능의 코드 및 리소스입니다. com.android.application com.android.dynamic-feature(모듈의 매니페스트에 dist:instant="false"dist:onDemand="false" 포함)

이 페이지에서는 기존 인스턴트 앱 프로젝트를 이전하여 인스턴트를 지원하는 Android App Bundle 빌드 방법을 보여줍니다. 또한, 인스턴트 지원 Android App Bundle을 빌드, 테스트 및 게시하는 방법도 설명합니다.

앱의 새 인스턴트 환경을 만들려면 인스턴트 지원 기능 모듈 만들기를 참조하세요.

변경사항 이해하기

대신 동적 기능 플러그인을 사용하기 위해 프로젝트를 이전하는 경우 Android App Bundle을 사용하면 최적화된 APK를 사용자에게 배포하는 과정이 크게 간소화된 앱을 빌드하고 게시할 수 있습니다.

App Bundle은 모든 앱의 컴파일된 코드 및 리소스를 패키징하여 업로드하는 방식으로 배포를 단순화하지만, APK 생성 및 Google Play 서명을 연기합니다. 그러면 Google Play의 새로운 앱 제공 모델이 App Bundle을 사용하여 각 사용자의 기기 설정에 최적화된 APK를 생성하고 제공하므로 사용자는 앱을 실행하는 데 필요한 코드와 리소스만 다운로드합니다. 더 이상 다양한 기기를 지원하기 위해 여러 개의 APK를 빌드, 서명, 관리할 필요가 없으며, 사용자는 더 작고 최적화된 앱을 다운로드하게 됩니다.

현재 지원 중단된 기능 플러그인을 사용하는 경우 인스턴트 앱을 빌드하려면 인스턴트 앱 모듈을 포함하여 모든 모듈의 공유 코드 및 리소스가 포함된 기본 기능 모듈을 만들어야 했습니다. 나머지 코드는 기본 기능 모듈이 아닌 여러 모듈에 포함되어 있었으며, 이러한 모듈에 인스턴트 환경의 진입점이 있었습니다. 설치된 앱 버전의 경우 프로젝트에 설치된 앱에만 필요한 코드와 활동이 포함된 별도의 앱 모듈이 있었을 수도 있습니다.

Android App Bundle을 지원하도록 앱을 이전할 때는 앱 모듈로 기본 모듈의 역할을 가져오고 추가 설치 환경 또는 인스턴트 환경을 기능 모듈로 구성합니다. 즉, 이제 인스턴트 지원 기본 모듈과 모듈식 추가 인스턴트 환경을 포함하는 기능을 사용하여 프로젝트가 표준 앱 프로젝트와 더 비슷해집니다.

기존의 인스턴트 앱 프로젝트를 이전하고 Android App Bundle의 더 최적화된 배포 모델을 적용하려면 아래 섹션에 설명한 단계를 따르세요.

기본 기능 모듈을 앱 모듈로 변환

기본 기능 모듈의 build.gradle 파일을 기본 앱 모듈로 변환하기 전에 먼저 다음과 같이 수정해야 합니다.

  1. baseFeature true 줄을 삭제합니다.
  2. feature 또는 application 종속 항목 구성을 사용하는 모든 종속 항목을 삭제합니다.

    Groovy

    dependencies {
        ...
        // delete any lines that look like
        // feature project(":foo")
        // feature project(":bar")
        // application project(":app")
    }
    

    Kotlin

    dependencies {
        ...
        // delete any lines that look like
        // feature(project(":foo"))
        // feature(project(":bar"))
        // application(project(":app"))
    }
    
  3. 기본 앱 모듈에 있을 것으로 예상되는 다른 모든 빌드 스크립트 구성과 마찬가지로 applicationId를 현재 com.android.application 모듈에서 com.android.feature 모듈로 이동합니다. 아래의 예를 참조하세요. 이 단계에서는 build.gradle의 특정 설정에 따라 이전 앱 모듈에서 build.gradleandroid 블록을 복사하여 새로운 앱 모듈의 build.gradle 파일에 붙여넣는 것이 더 쉬울 수도 있습니다. 하지만 이 작업은 주의해서 해야 합니다.

    Groovy

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile(
                  'proguard-android-optimize.txt'),
                  'proguard-rules.pro'
            }
        }
    }
    

    Kotlin

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId = "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            getByName("release") {
                minifyEnabled = true
                proguardFiles(
                    getDefaultProguardFile("proguard-android-optimize.txt"),
                    "proguard-rules.pro"
                )
            }
        }
    }
    
  4. 아래와 같이 매니페스트에 적절한 번들 배포 태그를 추가하여 기능 모듈을 인스턴트 지원으로 표시합니다.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
    </manifest>
    
  5. 기능 모듈의 플러그인 유형을 com.android.application으로 변경하여 기본 앱 모듈로 변환합니다.

    Groovy

    // Replace  "plugins { id 'com.android.feature' }"
    // with the following
    plugins {
      id 'com.android.application'
    }
    

    Kotlin

    // Replace  "plugins { id("com.android.feature") }"
    // with the following
    plugins {
        id("com.android.application")
    }
    

이전 앱 모듈을 설치 시간 기능 모듈로 변환

이전 섹션의 단계에서 기능 모듈을 앱의 기본 앱 모듈로 변환했으므로 이전 앱 모듈에 코드나 리소스가 없다면 간단히 앱 모듈을 삭제하면 됩니다.

하지만, 사용자가 앱을 설치할 때 제공하고 싶은 기능을 나타내는 코드 및 리소스가 이전 앱 모듈에 있다면 이 섹션의 단계를 따라 앱 모듈을 기능 모듈로 변환해야 합니다.

기능 모듈을 만들려면 플러그인 유형을 com.android.application에서 com.android.dynamic-feature로 변경하고 몇 가지 다른 build.gradle 변경사항을 적용합니다.

  1. 플러그인 유형을 com.android.application에서 com.android.dynamic-feature로 변경합니다.

    Groovy

    // Replace "plugins { id 'com.android.feature' }"
    // with the following:
    plugins {
      id 'com.android.dynamic-feature'
    }
    

    Kotlin

    // Replace "plugins { id("com.android.application") }"
    // with the following:
    plugins {
        id("com.android.dynamic-feature")
    }
    
  2. 이전 섹션에서 설명한 대로 com.android.application 플러그인에 필요한 빌드 구성(예: applicationId 또는 proguardFiles 규칙)을 기본 앱 모듈로 이동했는지 확인합니다.

  3. 모듈 이름을 다음과 같이 'installed_feature'와 같은 이름으로 바꿉니다.

    1. 메뉴 바에서 View > Tool Windows > Project를 선택하여 Project 창을 엽니다.
    2. 기능 모듈을 마우스 오른쪽 버튼으로 클릭하고 Refactor > Rename을 선택합니다.
    3. 표시되는 대화상자에서 Rename module을 선택하고 OK를 클릭합니다.
    4. 모듈의 새 이름을 입력하고 OK를 클릭합니다.
  4. 3단계와 마찬가지로 이전 섹션에서 만든 새 앱 모듈의 이름을 'app'과 같은 이름으로 바꿉니다.

  5. 아래와 같이 기능 모듈의 build.gradle 파일에 'app' 모듈의 구현 종속 항목을 추가합니다.

    Groovy

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation project(":app")
    }
    

    Kotlin

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation(project(":app"))
    }
    
  6. 새 앱 모듈의 build.gradle 파일에 기능을 추가합니다.

    Groovy

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures = [":installed_feature"]
    }
    

    Kotlin

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures.addAll(listOf(":installed_feature"))
    }
    
  7. 기능 모듈의 매니페스트에서 적절한 번들 배포 태그를 매니페스트에 추가하여 기능 모듈을 설치 가능한 모듈로 표시합니다.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="false" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    

다른 기능 모듈을 인스턴트 지원 기능 모듈로 변환

앱의 추가 기능을 여러 기능 모듈로 모듈화했다면 이 섹션의 단계를 따라 모듈을 인스턴트 지원 기능 모듈로 변환해야 합니다.

프로젝트의 나머지 각 기능 모듈은 다음과 같이 인스턴트 지원 기능으로 변환하세요.

  1. 아래와 같이 build.gradle 파일의 플러그인 유형을 com.android.dynamic-feature로 변경합니다.

    Groovy

    // Replace 'com.android.feature' with 'com.android.dynamic-feature'
    plugins {
      id 'com.android.dynamic-feature'
    }
    

    Kotlin

    // Replace "com.android.feature" with "com.android.dynamic-feature"
    plugins {
        id("com.android.dynamic-feature")
    }
    
  2. 다음을 매니페스트에 추가하여 각 기능 모듈을 인스턴트 지원으로 표시합니다.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    
  3. installed_feature를 기능 모듈 목록에 추가했던 새 애플리케이션 모듈의 build.gradle 파일에 기능 모듈을 추가합니다.

    Groovy

    android {
       ...
       dynamicFeatures = [":installed_feature", ":feature_1", ":feature_2"]
       // or whichever name exists for the instant enabled feature module
    }
    

    Kotlin

    android {
       ...
       dynamicFeatures.addAll(listOf(":installed_feature", ":feature_1", ":feature_2"))
       // or whichever name exists for the instant enabled feature module
    }
    

새로운 인스턴트 지원 App Bundle의 빌드, 테스트 및 게시

이 페이지의 단계를 완료한 후, 프로젝트에서 앱의 설치된 버전과 인스턴트 버전을 모두 Google Play Console에 게시하고 인스턴트 트랙 및 설치된 트랙을 별도로 출시하는 데 사용할 수 있는 단일 아티팩트인 Android App Bundle을 생성할 수 있습니다. 또한, App Bundle을 사용하여 각 사용자의 기기 설정에 최적화된 APK를 제공할 수 있으므로, 사용자는 앱을 실행하는 데 필요한 코드와 리소스만 다운로드합니다. 즉, 다양한 기기를 지원하기 위해 여러 APK를 빌드, 서명, 관리하지 않아도 되며, 사용자는 더 작고 최적화된 앱을 다운로드하게 됩니다.

인스턴트 지원 App Bundle을 빌드하고 테스트하려면 App Bundle 빌드로 이동하세요.