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 を
詳しくは、追加の言語リソースをダウンロードするをご覧ください。