기본 모듈 구성

App Bundle은 기기에 배포할 수 없다는 점에서 APK와 다릅니다. 정확히 말해 App Bundle은 앱의 모든 컴파일된 코드 및 리소스를 단일 빌드 아티팩트에 포함하는 게시 형식입니다. 따라서 서명된 App Bundle을 업로드하면 Google Play는 앱의 APK를 빌드하고 서명하며 사용자에게 제공하는 데 필요한 모든 것을 갖추게 됩니다.

시작하기

대부분의 앱 프로젝트에서는 큰 노력을 기울이지 않고 간편하게 Android App Bundle을 지원할 수 있습니다. 그 이유는 앱의 기본 APK용 코드 및 리소스를 포함하는 모듈이 표준 앱 모듈이므로 Android 스튜디오에서 새로운 앱 프로젝트를 생성할 때 기본적으로 제공되기 때문입니다. 즉, 아래의 application 플러그인을 다음 종속 항목에 적용하는 모듈입니다. 기본 기능의 코드와 리소스를 제공하는 build.gradle 파일 있습니다.

Groovy

// The standard application plugin creates your app's base module.
plugins {
 id 'com.android.application'
}

Kotlin

plugins {
    // The standard application plugin creates your app's base module.
    id("com.android.application")
}

기본 모듈은 앱의 핵심 기능을 제공하는 것 외에도 앱 프로젝트 전체에 영향을 주는 여러 빌드 구성 및 매니페스트 항목도 제공합니다.

기본 모듈 빌드 구성

대부분의 기존 앱 프로젝트에서는 기본 모듈의 빌드 구성을 바꾸지 않아도 됩니다. 하지만 Cloud Functions에 이전에 버전 3을 사용하여 앱을 출시한 경우 기본 모듈의 빌드 구성에 몇 가지 측면이 있음 몇 가지 옵션이 있습니다

버전 코드 및 앱 업데이트

Android App Bundle을 사용하면 더 이상 Google Play에 업로드하는 여러 APK의 버전 코드를 관리하지 않아도 됩니다. 대신 아래와 같이 앱의 기본 모듈에서 하나의 버전 코드만 관리합니다.

// In your base module build.gradle file
android {
    defaultConfig {
        
        // You specify your app’s version code only in the base module.
        versionCode 5
        versionName "1.0"
    }
}

App Bundle을 업로드하면 Google Play가 기본 모듈에 있는 버전 코드를 사용하여 App Bundle에서 생성한 모든 APK에 동일한 버전 코드를 할당합니다. 즉, 기기에 앱을 다운로드하여 설치하면 앱의 모든 분할 APK가 동일한 버전 코드를 공유합니다.

새 코드나 리소스로 앱을 업데이트하려면 반드시 앱 기본 모듈의 버전 코드를 업데이트하고 새 App Bundle 전체를 빌드해야 합니다. 빌드한 App Bundle을 Google Play에 업로드하면 기본 모듈에서 지정한 버전 코드를 기반으로 APK의 새로운 세트가 생성됩니다. 그 후에 사용자가 앱을 업데이트하면 Google Play에서 현재 기기에 설치된 모든 APK의 업데이트 버전을 제공합니다. 즉, 설치된 모든 APK가 새로운 버전 코드로 업데이트됩니다.

기타 고려사항

  • 앱 서명: 빌드 파일에 서명 정보를 포함하는 경우 기본 모듈의 빌드 구성 파일에만 포함해야 합니다. 자세한 내용은 앱에 서명하도록 Gradle을 구성합니다.
  • 코드 축소: 전체 앱 프로젝트(기능 모듈 포함)에 코드 축소를 사용 설정하려면 반드시 기본 모듈의 build.gradle 파일에서 해야 합니다. 즉, 맞춤 ProGuard 규칙을 기능 모듈에 포함할 수는 있지만 기능 모듈 빌드 구성의 minifyEnabled 속성은 무시됩니다.
  • splits 블록이 무시됨: App Bundle을 빌드할 때 Gradle은 android.splits 블록에 있는 속성을 무시합니다. App Bundle이 지원하는 구성 APK 유형을 제어하려면 대신 android.bundle을 사용하여 구성 APK 유형을 사용 중지합니다.
  • 앱 버전 관리: 기본 모듈이 전체 앱 프로젝트의 버전 코드와 버전 이름을 결정합니다. 자세한 내용은 앱 업데이트 관리 방법 섹션을 참조하세요.

구성 APK 유형을 다시 사용 또는 사용 중지

기본적으로 App Bundle을 빌드할 때 App Bundle은 언어 리소스, 화면 밀도 리소스 및 ABI 라이브러리 세트마다 구성 APK를 생성하도록 지원합니다. 아래와 같이 기본 모듈의 build.gradle 파일에서 android.bundle 블록을 사용하여 하나 이상의 구성 APK 유형 지원을 중지할 수 있습니다.

Groovy

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

Kotlin

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

언어 변경 처리

Google Play는 앱을 기반으로 설치할 언어 리소스를 결정합니다. 사용자의 기기 설정에서 언어 선택에 따라 달라집니다. 다음과 같은 사용자를 생각해 보세요. 사용자가 이미 앱을 다운로드한 후 기본 시스템 언어를 변경할 수 있습니다. 앱에서 해당 언어를 지원하는 경우 기기에서 구성 APK를 다운로드할 수 있습니다.

애플리케이션 내에서 언어 선택 도구를 제공하고 동적으로 시스템 수준의 언어 설정과 관계없이 앱의 언어 변경 리소스 누락으로 인한 비정상 종료를 방지하기 위해 몇 가지 사항을 변경해야 합니다. 둘 중 하나 android.bundle.language.enableSplit 속성을 false로 설정하거나 다음과 같이 Play Core 라이브러리를 사용하여 주문형 언어 다운로드를 구현합니다. 추가 언어 리소스 다운로드에 설명된 대로