2021 年 8 月、Google は Android アプリの配布方法を根本的に変える決定を下しました。Google Play ストアに送信されるすべての新しいアプリは、従来の APK ではなく Android アプリ バンドル (AAB) 形式を使用する必要があります。この変化は、開発者、ユーザー、そしてサードパーティのアプリ配布のエコシステム全体に影響を与えました。しかし、App Bundle とは正確には何で、どのように機能し、なぜ気にする必要があるのでしょうか?
このガイドでは、AAB 形式の技術的な内部的な内容から、アプリを友達と共有したり、Play ストアにアクセスせずにデバイスにインストールしたいユーザーへの実際的な影響まで、すべてを説明します。
Android アプリバンドルとは何ですか?
Android アプリ バンドルは、アプリのコンパイルされたコードとリソースがすべて含まれる公開形式ですが、最終的にインストール可能な APK の生成は Google Play に委ねられます。これは、Google のサーバーが最適化されたデバイス固有のパッケージをその場で作成するマスター テンプレートと考えてください。
すぐにインストールできるパッケージである APK とは異なり、AAB ファイルはデバイスに直接インストールできません。これは Play ストアにアップロードされるビルド アーティファクトで、Google のインフラストラクチャがそれを処理し、デバイス構成ごとに調整された APK を生成します。
ファイル拡張子は .aab で、内部的には ZIP のような構造と組み合わせたプロトコル バッファ形式を使用します。これには、アプリの DEX バイトコード、リソース、アセット、ネイティブ ライブラリ、および Google Play にコンテンツの分割方法を指示する特別なバンドル メタデータ ファイルが含まれています。
Google がアプリ バンドルを義務付ける理由
App Bundle の主な動機は アプリのダウンロードサイズを減らす です。一般的な Android アプリは、複数の画面密度 (mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi)、複数の CPU アーキテクチャ (armeabi-v7a、arm64-v8a、x86、x86_64)、および複数の言語をサポートする必要があります。従来の APK モデルでは、特定のデバイスに必要なのはリソースの一部だけであっても、これらのリソースはすべて 1 つのファイルにバンドルされています。
4 つの CPU アーキテクチャのネイティブ ライブラリと 5 つの画面密度のテクスチャが含まれるゲームを考えてみましょう。ユニバーサル APK は 200 MB ですが、関連するアーキテクチャと密度のみを含むデバイス固有のバージョンは 80 MB になる可能性があります。これはダウンロード サイズが 60% 削減されることになります。
Google の報告によると、App Bundle を使用するアプリは、同等のユニバーサル APK よりも平均して 15% 小さいとのことです。大規模なアプリやゲームの場合、節約はさらに劇的になる可能性があります。ダウンロードが小さいほど、インストールが速くなり、帯域幅の消費が少なくなり、サイズの問題によるインストールの放棄が少なくなります。
App Bundle の内部的な仕組み
バンドルの構造
AAB ファイルはモジュールに編成されており、各モジュールには独自のコード、リソース、アセットが含まれています。最も一般的な構造には次のものが含まれます。
- ベースモジュール: すべてのデバイスに必要なコア アプリ コードとリソースが含まれています。これは常にインストールされます。
- 構成の分割: 言語リソース、画面密度リソース、および ABI (CPU アーキテクチャ) ネイティブ ライブラリについては別のセクション。
- 動的機能モジュール: 初期インストール後にオンデマンドでダウンロードできるオプションのモジュール。
- アセットパック: インストール時、オンデマンド、またはバックグラウンドで配信できるゲーム レベルやメディアなどの大規模なアセット。
分割APK生成
ユーザーが Play ストアからアプリをダウンロードすると、Google のサーバーはデバイスの構成を調べ、その特定のデバイスに合わせた分割 APK のセットを生成します。一般的なインストールには次のものが含まれます。
- base.apk、コアアプリケーションコードと必須リソース
- split_config.arm64_v8a.apk、デバイスの CPU のネイティブ ライブラリ
- split_config.xxhdpi.apk、デバイスの画面密度のリソース
- split_config.en.apk、ユーザーのロケールの言語リソース
これらの分割 APK は、単一の論理アプリとしてまとめてインストールされます。 Android パッケージ マネージャーはこれらを 1 つのアプリケーションとして扱いますが、デバイス上では物理的に別個のファイルです。これがサイズ削減を可能にする仕組みです。
動的配信
App Bundle の最も強力な機能の 1 つは動的な配信です。開発者は、特定の機能をオンデマンドでダウンロード可能としてマークできます。たとえば、写真編集アプリには、動的機能モジュールとして高度なフィルターが含まれている場合があります。これらのフィルターを使用しないユーザーはフィルターをダウンロードしないため、ストレージ容量が節約されます。
動的機能モジュールは、実行時に Play Core ライブラリを通じてダウンロードおよびインストールされます。アプリはモジュールがインストールされているかどうかを確認し、必要に応じてダウンロードを要求できるため、ユーザーは完全な再インストールではなく、小さなアプリ内ダウンロードとして新機能を体験できます。
AAB と APK: 主な違い
これらの形式の違いを理解すると、それぞれがどのような場合に適切であるかを明確にするのに役立ちます。
- 設置性: APK ファイルは、任意の Android デバイスに直接インストールできます。 AAB ファイルは直接インストールできないため、最初に処理する必要があります。
- サイズ: ユニバーサル APK には、すべての構成のリソースが含まれています。 AAB を使用すると、デバイス固有の配信が可能になり、ダウンロードが小さくなります。
- 署名: APK を使用すると、開発者は最終的なインストール可能なパッケージに署名します。 AAB では、開発者がバンドルに署名し、Google が Play アプリ署名を使用して生成された APK に再署名します。
- 分布: APK は任意のチャネルを通じて配布できます。 AAB は主に Play ストア用に設計されていますが、bundletool などのツールは AAB からローカルで APK を生成できます。
- 共有性: APKファイルは他の人と簡単に共有できます。 AAB からインストールされたアプリを共有するには、分割されたすべての APK を収集する必要がありますが、これはより複雑です。
署名論争
AAB の義務で最も議論されている側面の 1 つは、Play アプリの署名 です。開発者が AAB をアップロードすると、Google はユーザーに配信される最終的な APK の署名に使用される署名キーを保持します。これは、Google が技術的に、署名して配信する前に APK コンテンツを変更できることを意味します。
Googleは、生成する分割APKに署名する必要があるため、これが必要であると主張している。開発者はアップロードを認証するためにアップロード キーを保持しますが、実際のアプリ署名キーは Google のインフラストラクチャによって管理されます。
ほとんどの開発者にとって、これは合理的なトレードオフです。 Google はキーのバックアップおよび復元サービスを提供しているため、キーの紛失のリスク (アプリの更新が永久にできなくなる) が排除されます。しかし、プライバシーを重視する開発者やオープンソース支持者は、この信頼の一元化について懸念を表明しています。
アプリを共有するユーザーにとってこれが意味すること
App Bundle への移行は、Play ストアの外でアプリを共有したいユーザーにとって重要な影響を及ぼします。
インストールされているアプリの抽出
AAB からインストールされたアプリを抽出しても、APK ファイルは 1 つも取得されません。代わりに、分割された APK のコレクションを取得します。これらの分割はデバイス固有です。つまり、ARM64 プロセッサと xxhdpi 画面を搭載した携帯電話から抽出されたアプリは、構成が異なるデバイスでは動作しません。
XAPK および APK 形式
分割 APK を共有するという課題に対処するために、XAPK や APKS などのコンテナ形式が作成されました。これらの形式は、分割されたすべての APK を 1 つのダウンロード可能なファイルにバンドルします。 XAPK ファイルが見つかった場合、そのファイルには、元々 App Bundle として配布されたアプリが含まれている可能性があります。
XAPKSからAPKへのコンバーター は、これらのコンテナ形式からベース APK を抽出するのに役立ちます。ただし、密度と ABI 固有のリソースが分割 APK に含まれている可能性があるため、基本 APK 単独には、アプリがすべてのデバイスで正しく機能するために必要なすべてのリソースが含まれているわけではないことに注意してください。
バンドルツールの使用
Google は、AAB ファイルからローカルで APK を生成できる bundletool というオープンソース ツールを提供しています。開発者はこれを使用して、テストまたは代替配布用のユニバーサル APK を作成できます。コマンドは次のようになります。
bundletool build-apks --bundle=app.aab --output=app.apks --mode=universal
これにより、すべての構成のすべてのリソースを含むユニバーサル APK が生成されます。デバイス固有のビルドよりも大きくなりますが、どのデバイスでも動作します。これは、AABからAPKへのコンバーター で使用されるアプローチです。
代替アプリストアへの影響
AAB の義務は主に Google Play ストアに影響します。代替アプリ ストアや直接配布チャネルでは、引き続き APK ファイルを受け入れることができます。 Play 以外で配布したい開発者は、AAB アップロードと並行してユニバーサル APK の構築を続けることができます。
ただし、一部の開発者は AAB のみを構築し、配布を Play に完全に依存しています。これは、これらの開発者のアプリを Play ストア エコシステムの外で入手するのが困難であることを意味します。サードパーティのアプリ リポジトリは、分割 APK コレクション (XAPK または APKS ファイルとして) をホストするか、bundletool を使用してユニバーサル APK を生成することによって適応されています。
実際の動的機能モジュール
動的機能モジュールは、App Bundle 形式の最も興味深い機能の 1 つを表します。実際の使用例をいくつか示します。
- カメラの機能: アプリには、ユーザーが最初にカメラ機能にアクセスしたときにのみダウンロードされる AR フィルターが動的モジュールとして含まれている場合があります。
- 言語パック: あまり一般的ではない言語の翻訳データは、すべてのインストールにバンドルするのではなく、オンデマンドで配信できます。
- ゲームレベル: ゲームは、プレイヤーの進行に応じて追加のコンテンツを配信できるため、最初のダウンロードは小さく抑えられます。
- プロフェッショナルツール: 生産性向上アプリの高度な機能は、それを必要とするユーザーにのみ提供できます。
これは、ユーザーにとって、動的モジュールがダウンロードされるにつれて、アプリのインストール サイズが時間の経過とともに増加する可能性があることを意味します。また、このようなアプリを共有するには、ダウンロードしたすべてのモジュールを含める必要があり、抽出プロセスがさらに複雑になります。
開発者向けのベスト プラクティス
Android アプリを開発している場合は、App Bundle を効果的に使用するための推奨事項を次に示します。
- Play にアップロードする前に 常にバンドルツールをローカルでテストしてください。 デバイス固有のAPKを生成し、正しく動作することを確認してください。
- Play Console の内部テスト トラックを使用する は、分割 APK が実際のデバイスにインストールされ、正しく機能することを確認します。
- ユーザー ベースが Play ストアを超えて広がっている場合の代替配信チャネルには ユニバーサル APK の提供を検討してください。
- 動的な機能モジュールの境界に注意してください。 頻繁に使用される機能は、動的モジュールではなく、ベース モジュールに含める必要があります。
- 異なる構成のデバイスでテストする を使用して、構成分割が正しく生成され、リソースが欠落していないことを確認します。
- アップロードキーを安全に保管してください。 Google がアプリ署名キーを管理している間、アップロード キーは開発者としての ID を認証します。
アプリ配布の未来
App Bundle 形式は進化し続けています。 Google は、大規模なゲーム アセット向けの Play Asset Delivery、SDK を宣伝するための SDK ランタイム、Wear OS および Android TV 構成のサポートの改善などの機能を導入しました。傾向としては、アプリ コンポーネントをよりきめ細かくオンデマンドで配信する方向です。
ユーザーにとって、これは、Play ストア アプリにおいて、単一の自己完結型アプリ ファイルという概念があまり一般的ではなくなっていることを意味します。 XAPK、APKS などの形式と、それらを操作するために利用できるツールを理解することは、標準の Play ストア フローの外でアプリを管理する人にとってますます重要になっています。
AAB を保持する場合とユニバーサル APK を構築する場合
Android App Bundle は、アプリのパッケージ化と配信方法における根本的な変化を表しています。これは、ダウンロード サイズと配信効率の点で真のメリットをもたらしますが、アプリを共有したり、代替ソースからインストールしたりするユーザーにとっては複雑さももたらします。 AAB の仕組み、分割 APK の生成方法、形式間の変換に使用できるツールを理解することで、適切な形式を選択し、自信を持って形式間で変換するために必要なものがわかります。
開発者は、アプリの配信方法を最適化するために AAB を利用します。ほとんどの日常ユーザーは、Play ストアにアクセスできないデバイスに何かをインストールしようとしたときにのみこの問題に遭遇します。いずれにせよ、覚えておくべきことは単純です。AAB は公開形式であり、インストール形式ではありません。この 2 つの間のギャップを埋めるツールが存在します。