Android App Bundle はアプリのコンパイル済みコードとリソースがすべて含まれた公開形式です。ただし、APK の生成と署名は Google Play が行います。
Google Play は App Bundle から、デバイス設定ごとに最適化した APK を生成、配信します。それによって、個々のデバイスでアプリを実行するのに必要なコードとリソースだけがダウンロードされます。デベロッパー側では、多様なデバイスのサポートを最適化するために複数の APK をビルド、署名、管理する必要がなくなり、ユーザー側では、よりサイズが小さく、最適化された APK をダウンロードできるようになります。
最適化された APK を配信できる App Bundle をビルドするのは、ほとんどの場合それほど難しくはありません。確立された手法に沿ってすでにアプリのコードとリソースを構成している場合、Android Studio またはコマンドラインを使用して、署名済みの Android App Bundle をビルドし、Google Play にアップロードすると、最適化された APK の配信が自動的に行われるようになります。
App Bundle 形式でアプリを公開する場合は、必要に応じて Play Feature Delivery を利用することもできます。これにより、アプリ プロジェクトに機能モジュールを追加できます。これらのモジュールは、指定した条件に基づいてアプリにのみ含まれている、または後からランタイムで Play Core Library の使用をダウンロードする際に利用できる機能とリソースを備えています。
App Bundle を使用してアプリを公開しているゲーム デベロッパーは、Play Asset Delivery を使用できます。これは、大量のゲームアセットを配信するための Google Play のソリューションであり、これによりデベロッパーは柔軟な配信方法を利用し、高パフォーマンスを実現できます。
Android App Bundle を使用したアプリの公開が推奨される理由について、次の動画をご覧ください。
圧縮ダウンロード サイズの制限
Android App Bundle を使用して公開すると、最小ダウンロード サイズでアプリをインストールできるようになり、圧縮ダウンロード サイズが引き上げられます。つまり、ユーザーがアプリをダウンロードする場合、アプリのインストールに必要な圧縮 APK の合計サイズ(ベース APK と設定 APK など)を 4 GB 以下にする必要があります。オンデマンドでの機能モジュール(およびその設定 APK)のダウンロードなど、後続のダウンロードも、この圧縮ダウンロード サイズの制限に従う必要があります。アセットパックはこのサイズ制限に含まれませんが、別のサイズ制限があります。
アプリやそのオンデマンド機能のダウンロードのいずれかが最大サイズの上限を超えていることが Play Console で検出されると、エラーが発生します。
なお、Android App Bundle は APK 拡張(*.obb)ファイルに対応していません。そのため、App Bundle の公開時にこのエラーが発生した場合は、以下のリソースのいずれかを使用して、圧縮 APK ダウンロード サイズを削減してください。
- 設定 APK ごとに
enableSplit = trueを設定して、すべての設定 APK が有効になるようにします。これにより、ユーザーがデバイスでアプリを実行するために必要なコードとリソースだけがダウンロードされるようになります。 - 未使用のコードやリソースを削除してアプリを縮小します。
- おすすめの方法に従ってアプリのサイズを削減します。
- 一部のユーザーのみが使用する機能を機能モジュールに変換して、アプリが後でオンデマンドでダウンロードできるようにすることを検討します。この設定を行うとアプリのリファクタリングが必要になる可能性があるため、上記の他の推奨事項をまずお試しください。
その他の考慮事項
Android App Bundle を使用してアプリをビルドまたは配信する際の既知の問題は次のとおりです。ここに記載されていない問題が発生した場合は、バグを報告してください。
- サイドローディングされたアプリ(Google Play ストアを使用せずにインストールされ、必要な分割 APK が欠けているアプリ)の部分的なインストールは、Google 認定デバイスと Android 10(API レベル 29)以上を搭載したデバイスのすべてで失敗します。Google Play ストアからアプリをダウンロードする場合は、アプリに必要なすべてのコンポーネントを Google が確実にインストールします。
リソース テーブルを動的に変更するツールを使用すると、App Bundle から生成された APK が予期しない動作をする場合があります。そのため、App Bundle をビルドする場合は、こうしたツールを無効にすることをおすすめします。
機能モジュールのビルド構成に、ベース(または他の)モジュールのプロパティと競合するプロパティを構成することが可能です。たとえば、ベース モジュールで
buildTypes.release.debuggable = trueを設定し、機能モジュールではfalseに設定できます。このように競合すると、ビルドとランタイムの問題が発生します。デフォルトでは、機能モジュールはベース モジュールから一部のビルド構成を継承します。したがって、機能モジュールのビルド構成で、保持する必要がある構成と省略する必要がある構成を把握しておいてください。
参考情報
Android App Bundle の詳細については、次のリソースをご覧ください。
ブログ投稿
- App Bundle を初めてビルドする
- 新しい公開形式は Android の未来に何をもたらすか
- Google Play での開発、リリース、ビジネス拡大に役立つ新機能
- 追加言語 API をはじめとする最新の Android App Bundle のアップデート
- Plaid をモジュール化してみた
- 「Google でサンタを追いかけよう」が Android App Bundle に移行
- Play Console のデベロッパー ツール
動画
- Play アプリ署名について把握する必要があるすべての事項
- App Bundle を初めてビルドする
- App Bundle: Bundletool と Play Console を使用したテスト
- App Bundle を使用したカスタマイズ可能な配信とテストビルドの簡単な共有方法
- アプリのサイズを最適化し、Google Play でのインストールを増やす新しいツール