ベース モジュールの設定

App Bundle はデバイスにデプロイできない点で APK とは異なります。1 つのビルド アーティファクト内にアプリのコンパイル済みコードとリソースをすべて含む公開形式です。そのため、署名付き App Bundle をアップロードすると、Google Play がアプリの APK をビルドして署名し、ユーザーに配信するために必要なものがすべて揃います。

始める

ほとんどのアプリ プロジェクトでは、Android App Bundle をサポートするのにそれほど労力はかかりません。Android Studio で新しいアプリ プロジェクトを作成する際に、アプリのベース APK 用のコードとリソースを含むモジュールが標準のアプリ モジュールとしてデフォルトで生成されるからです。つまり、以下の 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")
}

ベース モジュールは、アプリのコア機能を提供するだけでなく、 さらに、ビルド構成やマニフェスト エントリの多くが 影響するためです

ベース モジュールのビルド構成

ほとんどの既存のアプリ プロジェクトでは、ベース モジュールのビルド構成に変更を加える必要はありません。今後 Google Cloud で 機能モジュールをアプリ プロジェクトに追加するか、以前に ベース モジュールのビルド構成にいくつかの側面があります。 覚えておくべき重要なことがあります。

バージョン コードとアプリのアップデート

Android App Bundle では、Google Play にアップロードする複数の APK のバージョン コードを管理する必要がなくなりました。下記に示すように、アプリのベース モジュールのバージョン コードを 1 つ管理するだけで済みます。

// 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 がベース モジュール内のバージョン コードを使って、そのバンドルから生成されるすべての APK に同じバージョン コードを割り当てます。それにより、デバイスにアプリがダウンロード、インストールされると、そのアプリの分割 APK はすべて同じバージョン コードを共有します。

新しいコードやリソースを含めてアプリを更新する際は、アプリのベース モジュールのバージョン コードを更新して、新たに App Bundle 全体をビルドする必要があります。その App Bundle を Google Play にアップロードすると、ベース モジュールが指定するバージョン コードに基づいて APK の新しいセットが生成されます。その後で、ユーザーがアプリを更新すると、そのデバイスに現在インストールされているすべての APK の更新版が Google Play から配信されます。それによって、インストールされているすべての APK が新しいバージョン コードに更新されます。

その他の考慮事項

  • アプリ署名: ビルドファイルに署名情報を含める場合は、 ベース モジュールのビルド構成ファイルにのみ含めてください。 詳細については、次をご覧ください: Gradle を設定してアプリに署名します
  • コードの圧縮: アプリ プロジェクト全体で(機能モジュールも含めて)コードの圧縮を有効にする場合は、ベース モジュールの build.gradle ファイルで有効にする必要があります。つまり、機能モジュールにカスタム ProGuard ルールを含めることはできますが、機能モジュールのビルド構成内の minifyEnabled プロパティは無視されます。
  • splits ブロックは無視される: App Bundle をビルドする際、android.splits ブロック内のプロパティは Gradle に無視されます。どのタイプの設定 APK を App Bundle がサポートするかを管理したい場合、代わりに android.bundle を使用して設定 APK のタイプを無効にします。
  • アプリのバージョニング: アプリ プロジェクト全体のバージョン コードとバージョン名は、ベース モジュールによって決まります。詳しくは、アプリの更新を管理する方法についての説明をご覧ください。

設定 APK のタイプを無効にするまたは再度有効にする

デフォルトでは、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 を Google Play から入手できます。

アプリ内で言語選択ツールを提供し、動的に システムレベルの言語設定とは別に、アプリの言語を変更する リソース不足によるクラッシュを防ぐには、いくつかの変更を加える必要があります。どちらでもかまわない android.bundle.language.enableSplit プロパティを false に設定するか、 オンデマンド言語のダウンロードを実装するには、Play Core Library を 詳しくは、追加の言語リソースをダウンロードするをご覧ください。