Android エコシステムでは、アプリ データのパッケージ化、配布、保存にさまざまなファイル形式が使用されます。サードパーティのソースからアプリをダウンロードしたことがある場合は、使い慣れた APK を超えるファイル拡張子に遭遇したことがあるでしょう。 XAPK、APKS、APKM、AAB、OBB などの形式は、それぞれ Android アプリのライフサイクルにおいて特定の目的を果たします。
このガイドは、すべての主要な Android ファイル形式の完全なリファレンスとなることを目的としています。開発者、アプリをサイドロードするパワー ユーザー、そしてこれらのファイルに実際に何が含まれているかを知りたいだけの好奇心旺盛な読者は、以下でそれぞれの形式をわかりやすい言葉で説明しています。
APK: Android パッケージ キット
APK は Android アプリケーションの基本的なファイル形式です。これは Android の創設以来標準のインストール形式であり、Android オペレーティング システムがアプリのインストールに関してネイティブに理解する形式であり続けています。
内容
APK ファイルは基本的に、特定の内部構造を持つ ZIP アーカイブです。
- AndroidManifest.xml、アプリのパッケージ名、コンポーネント、権限、要件を宣言するバイナリ XML ファイル
- classes.dex (および classes2.dex など)、アプリの Java/Kotlin コードを含むコンパイル済み Dalvik バイトコード
- resources.arsc、リソース ID をその値にマッピングするコンパイル済みリソース テーブル
- res/、ID によって参照されるレイアウト、ドローアブル、文字列などのリソースを含むディレクトリ
- assets/、実行時に AssetManager を通じてアプリによってアクセスされる生のアセット ファイル
- lib/、CPU アーキテクチャごとに編成されたネイティブ ライブラリ (例: lib/arm64-v8a/)
- META-INF/、署名ファイルと証明書情報
遭遇したら
APK ファイルは、サードパーティのソースからアプリをサイドロードするときにダウンロードするものです。これらは Play ストアからデバイスにインストールされるものでもありますが、最近の Play ストアのインストールでは App Bundle から生成された分割 APK が使用されることがよくあります。
対処方法
APK ファイルは、ファイル マネージャーで開くか、adb install を使用して Android に直接インストールできます。拡張子の名前を .zip に変更して抽出するか、APK ベリファイア を使用して署名とメタデータを検査することで、その内容を調べることもできます。
AAB: Android アプリ バンドル
Android App Bundle は、Google の Play ストア用の公開形式です。 2021 年 8 月以降、Play ストア上のすべての新しいアプリは、APK ではなく AAB として送信する必要があります。
内容
AAB ファイルはプロトコル バッファベースの形式を使用し、次の内容が含まれます。
- ベースモジュール: すべてのデバイスで必要なコア アプリのコードとリソース
- 構成の分割: 画面密度、CPU アーキテクチャ、言語ごとに整理されたリソース
- 動的機能モジュール: オンデマンドでダウンロードできるオプション機能
- バンドルのメタデータ: デバイス固有の APK を生成する方法に関する Google Play の手順
遭遇したら
通常のユーザーは、通常、AAB ファイルに直接遭遇することはありません。これらは、ビルドおよびアップロードのプロセス中に開発者によって使用されます。ただし、AAB ファイルを (おそらくオープンソース プロジェクトのビルド アーティファクトから) 取得した場合は、インストール前にそれを APK 形式に変換する必要があります。
対処方法
Google の bundletool コマンドライン ユーティリティまたは AABからAPKへのコンバーター を使用して、AAB ファイルからインストール可能な APK を生成します。変換プロセスでは、ユニバーサル APK (より大きく、どこでも機能する) またはデバイス固有の APK (より小さく、デバイスをターゲットとした) が作成されます。
XAPK: 拡張 APK
XAPK は、APKPure によって普及されたコンテナ形式で、APK とそれに関連付けられた OBB データ ファイルをバンドルするか、APK 構成を 1 つのダウンロード可能なパッケージに分割します。
内容
XAPK ファイルは、以下を含む ZIP アーカイブです。
- ベース APK ファイル (メイン アプリケーション)
- OBB ファイル (ゲームや大規模アプリの拡張データ)
- 必要に応じて、異なるデバイス構成に合わせて APK ファイルを分割します
- パッケージの内容とインストール手順を説明した manifest.json ファイル
- 表示用のアイコンファイル
遭遇したら
サードパーティのアプリリポジトリから大容量のアプリやゲームをダウンロードする際に、XAPKファイルを目にすることがあります。追加のデータ ファイル (以前は OBB ファイルとして配布されていた) を必要とするゲームは、ダウンロード プロセスを 1 つのファイルに簡素化するために XAPK としてパッケージ化されるのが一般的です。
対処方法
XAPK ファイルは、Android のデフォルトのパッケージ インストーラーでは直接インストールできません。専用の XAPK インストーラー アプリが必要か、XAPKSからAPKへのコンバーター を使用してベース APK を抽出できます。 OBB データが必要なゲームの場合は、OBB エクストラクター を使用して OBB ファイルを抽出し、正しいディレクトリに配置する必要もあります。
APK: APK セット
APKS 形式は、AAB ファイルからデバイス固有の APK を生成する際の Google のバンドルツールの出力です。一部のアプリ バックアップ ツールでも、分割 APK インストールを保存するために使用されます。
内容
APKS ファイルは、以下を含む ZIP アーカイブです。
- toc.pb、分割構造を説明するプロトコル バッファーの目次
- splits/、ベース APK とすべての構成分割 APK を含むディレクトリ
- オプションで、分割インストールをサポートしないデバイス用のスタンドアロン APK
遭遇したら
APKS ファイルは、bundletool をローカルで使用するとき、Play ストアからインストールされたアプリをバックアップするとき、または分割 APK 構造を保持する特定のサードパーティ リポジトリからダウンロードするときに発生します。
対処方法
Bundletool の install-apks コマンドを使用して APKS ファイルをインストールすることも、APK と APK の統合 を使用して単一の APK に変換することもできます。分割された APK をユニバーサル APK にマージすると、すべての構成リソースが結合されるため、ファイル サイズが増加する可能性があることに注意してください。
APKM: APKMirrorパッケージ
APKM は、複数の分割 APK で構成されるアプリを配布するために APKMirror によって作成された独自のコンテナ形式です。 XAPK や APKS と同様の目的を果たしますが、APKMirror 独自の構造を使用します。
内容
APKM ファイルは、以下を含む ZIP アーカイブです。
- ベースAPKファイル
- さまざまな構成 (密度、ABI、言語) に合わせて APK ファイルを分割
- パッケージ構造を説明するメタデータ ファイル
遭遇したら
APKM ファイルは、APKMirror からダウンロードする場合にのみ発生します。このサイトでは、Play ストアで App Bundle として配布されるアプリにこの形式を使用しているため、複数の分割 APK で構成されています。
対処方法
APKM ファイルを直接インストールするには、APKMirror インストーラー アプリが必要です。または、コンテンツを抽出し (ZIP ファイルであるため)、ADB の install-multiple コマンドを使用して分割された APK を手動でインストールすることもできます。基本 APK を抽出してスタンドアロンでインストールすることもできますが、構成を分割しないと一部の機能が制限される場合があります。
OBB: 不透明なバイナリ BLOB
OBB ファイルは、Play ストアの APK サイズ制限を超える大量のデータを保存するために Android アプリ (主にゲーム) で使用される拡張ファイルです。 Google はこのシステムの大部分を Play Asset Delivery に置き換えましたが、多くの既存アプリは依然として OBB ファイルを使用しています。
内容
OBB ファイルには、アプリが必要とするあらゆる種類のデータを含めることができます。
- ゲームテクスチャと3Dモデル
- オーディオファイルとサウンドトラック
- 動画コンテンツ
- レベルデータとマップ
- 開発者が外部に保存することを選択した大きなバイナリ データ
OBB ファイル内のデータの形式は完全に開発者次第です。 ZIP 圧縮を使用するものもあれば、カスタム バイナリ形式を使用するものもあります。名前の「Opaque」は、Android がファイルをブラック ボックスとして扱うことを反映しています。
遭遇したら
OBB ファイルは、大規模なゲームをサイドロードする場合、またはゲームが XAPK パッケージ内にバンドルされている場合に発生します。これらは、デバイスの共有ストレージ上の /Android/obb/[package.name]/ に保存されます。
対処方法
OBB ファイルは、アプリが見つけられるように正しいディレクトリに配置する必要があります。通常、ファイル名は main.[version].[package.name].obb または patch.[version].[package.name].obb のパターンに従います。 OBB エクストラクター を使用して、XAPK パッケージから OBB ファイルを抽出します。
DEX: Dalvik 実行可能ファイル
DEX ファイルには、Android のランタイム環境で実行されるコンパイルされたバイトコードが含まれています。これらは APK ファイル内にありますが、開発中やデバッグ中に独立して存在することもあります。
内容
DEX ファイルには次のものが含まれます。
- Dalvik 命令形式でコンパイルされた Java/Kotlin バイトコード
- 文字列定数と型定義
- メソッドとフィールドの参照
- クラス定義とその階層
技術的な詳細
1 つの DEX ファイルには、65,536 のメソッド参照制限 (「64K 制限」) があります。この制限を超えるアプリは、マルチデックスと呼ばれる複数の DEX ファイル (classes.dex、classes2.dex など) を使用します。最新のビルド ツールはこれを自動的に処理します。
ODEX、VDEX、および ART ファイル
これらは、インストール中またはインストール後に Android ランタイムによって作成される DEX ファイルの最適化されたバージョンです。
- ODEX (最適化された DEX): 頻繁に使用されるメソッド用に事前にコンパイルされたネイティブ マシン コードが含まれています。使用プロファイルに基づいてアイドル状態のメンテナンス中に生成されます。
- VDEX (検証済み DEX): 事前に計算された検証結果を含む検証済みの DEX バイトコードが含まれます。これにより、再検証がスキップされるため、その後の起動とアプリの起動が高速化されます。
- ART (Android ランタイム イメージ): 事前に初期化されたクラス オブジェクトとヒープ データが含まれます。これにより、ランタイムは起動時に共通のフレームワーク クラスのクラスの読み込みと初期化をスキップできます。
これらのファイルはシステムによって生成され、通常はユーザーが直接操作するものではありません。これらは /data/dalvik-cache/ に保存されるか、または /data/app/ の APK と一緒に保存されます。
SO: 共有オブジェクト (ネイティブ ライブラリ)
.so 拡張子を持つファイルは、特定の CPU アーキテクチャ用にコンパイルされたネイティブ共有ライブラリです。これらには、C、C++、または Rust で書かれたマシン コードが含まれており、Dalvik/ART ランタイムのオーバーヘッドなしでプロセッサ上で直接実行されます。
アーキテクチャのバリエーション
- armeabi-v7a、32 ビット ARM (ほとんどの古いデバイス)
- arm64-v8a、64 ビット ARM (最新の携帯電話)
- x86、32 ビット Intel/AMD (一部のタブレットおよびエミュレータ)
- x86_64、64 ビット Intel/AMD (Chromebook およびエミュレータ)
APK にネイティブ ライブラリが含まれる場合、ターゲット デバイスに適したアーキテクチャが含まれている必要があります。間違ったアーキテクチャが含まれている場合、アプリは UnsatisfiedLinkError でクラッシュします。
Android の XML ファイル
Android は XML を広範囲に使用しますが、その形式は 2 つあります。
バイナリXML
APK ファイル内では、XML リソース (レイアウト、マニフェスト、文字列ファイル) は、AXML と呼ばれるコンパイルされたバイナリ形式で保存されます。この形式はテキスト XML よりもコンパクトで、解析が高速です。 aapt2 や apktool などのツールは、バイナリ XML を逆コンパイルして読み取り可能なテキストに戻すことができます。
テキスト XML
開発中、XML ファイルは標準のテキスト形式です。ビルド プロセスでは、APK に含めるためにそれらをバイナリ XML にコンパイルします。 network_security_config.xml などの構成ファイルや res/ ディレクトリ内のリソース ファイルは、テキスト XML として開始されます。
ProGuard/R8 マッピング ファイル
Android 固有の形式ではありませんが、マッピング ファイル (mapping.txt) は難読化されたアプリを理解するために重要です。開発者が R8 などのコード圧縮ツールを使用すると、クラス名とメソッド名が短くて意味のない識別子に置き換えられます。マッピング ファイルには、クラッシュ レポートを読み取るために不可欠な、元の名前から難読化された名前への変換が記録されます。
Android バックアップ形式 (AB)
拡張子が .ab のファイルは、adb backup によって作成された Android バックアップ アーカイブです。これらには、アプリのデータ ディレクトリの tar アーカイブ (オプションで圧縮および暗号化) が含まれています。この形式は、クラウドベースのバックアップ ソリューションを優先して非推奨になりつつありますが、一部のバックアップ ツールでは依然として使用されています。
IMG とパーティションイメージ
アプリとは関係ありませんが、Android システム イメージでは言及に値するいくつかの形式が使用されています。
- システム.img: Android フレームワークとプリインストールされたアプリを含む読み取り専用のシステム パーティション
- boot.img: Linux カーネルと初期 RAM ディスクが含まれます
- ベンダー.img: ハードウェア固有のドライバーとファームウェア
- super.img: 最新のデバイス (Android 10 以降) で使用される動的パーティション コンテナー
フォーマット比較表
主なアプリの配布形式を比較したクイック リファレンスは次のとおりです。
- APK: 単一ファイル、直接インストール可能、ユニバーサル (すべての構成が含まれる)、大きなサイズ
- AAB: 公開形式は直接インストールできず、Play ストアによる処理が必要です
- XAPK: コンテナ (APK + OBB/分割)、APKPure で使用されるインストーラーまたは抽出が必要
- APKS: コンテナ (分割 APK)、bundletool 形式、インストーラーまたはマージが必要
- APKM: コンテナ (分割 APK)、APKMirror 形式、インストーラーが必要
適切なツールの選択
使用している形式に応じて、適切なツールが異なります。
- XAPKをお持ちですか? XAPKSからAPKへのコンバーター を使用して、インストール可能な APK を抽出します
- AAB をお持ちですか? AABからAPKへのコンバーター を使用してユニバーサル APK を生成します
- 分割 APK (APKS) をお持ちですか? APK と APK の統合 を使用して組み合わせてください。
- APK を確認する必要がありますか? APK ベリファイア を使用して署名を確認してください
- XAPK からの OBB ファイルが必要ですか? OBB エクストラクター を使用して拡張ファイルを解凍します
どの Android パッケージ形式を使用する必要がありますか?
Android エコシステムのさまざまなファイル形式は、単純な単一ファイル APK から洗練されたモジュラー配信システムへのプラットフォームの進化を反映しています。それぞれの形式は特定の問題を解決するために存在します。AAB はダウンロード サイズを削減し、XAPK はマルチファイル アプリの配布を簡素化し、OBB は大きなゲーム データを処理し、分割 APK はデバイス固有の最適化を可能にします。
これらの形式を理解すると、アプリのサイドローディング、デバイスのバックアップ、または独自のアプリケーションの開発のいずれの場合でも、実行する Android パッケージを処理できるようになります。重要なポイントは、これらの形式のほとんどは、最終的にはさまざまな構成で APK ファイルを保持するコンテナーであり、適切なツールを使用すれば、いつでも必要なものを抽出できるということです。