APK ファイル形式とは?
拡張子 .apk を持つファイルは、Android システム用のアプリケーション、ゲーム、またはファームウェアを含む圧縮アーカイブです。APK パッケージは ZIP/JAR コンテナ形式に基づいているため、標準的なアーカイブツールで内容を開いて検査することができます。Google Play では当初、.apk のダウンロードに 100 MB の制限を設け、追加リソース用にそれぞれ最大 2 GB の拡張ファイルを 2 つまで許可していました。2021年8月以降、Google Play では新しいアプリを .AAB (Android App Bundles) として公開することが義務付けられました。これは、単一の巨大なパッケージを配布するのではなく、インストール時にデバイスに最適化された分割 APK を生成する仕組みです。
APK ファイルの構造
APK ファイルの構造は JAR アーカイブに基づいており、以下のサブフォルダとファイルが含まれる場合があります:
res- コンパイルされていない形式のリソース記述を含むlib- コンパイル済みのソースとアプリケーションライブラリを含み、異なるコンピューティングプラットフォーム(例:arm64-v8a,x86_64)ごとに分割されているMETA-INF- パッケージに関する情報を含むファイル(例:MANIFEST.MFファイルや証明書)を保持するassets- アプリで使用される様々なリソースを含むclasses.dex- Android ランタイムによって実行されるコンパイル済みの Dalvik/ART バイトコードAndroidManifest.xml- アプリの権限、コンポーネント、SDK 要件を宣言するバイナリエンコードされたマニフェストresources.arsc- ID を文字列、レイアウト、ドローアブルにマッピングするプリコンパイル済みのリソーステーブル
Android Package ファイルは、Android システム上で動作するモバイルプラットフォーム向けのプログラムを作成・配布するために使用されます。.apk ファイルの内容は、ZIP 圧縮をサポートするほとんどの解凍プログラムで展開でき、ファイル名を .zip に変更するだけで中身を確認できます。整合性を維持するため、パッケージは APK Signature Scheme v2/v3(および増分更新用の v4)によって保護されており、署名が一致しない場合はインストールが拒否されます。Play ストア以外からの .apk パッケージのインストールはデフォルトでは許可されていません。ユーザーは Android の設定で 不明なアプリのインストール 権限を有効にするか、adb install app.apk を介してパッケージをプッシュする必要があります。単一の .apk に収まらないほど大きなアプリは、ベース APK と 1 つ以上の分割 APK を 1 つのアーカイブにまとめた .XAPK として配布されることがあります。
セキュリティと安全性
リスク: HIGHAPK は Android におけるマルウェアの最大の媒介です。サイドローディングは Google Play プロテクトのスキャンをバイパスします。ユーザー向けのチェックリスト:信頼できるソース(Google Play, F-Droid, 開発者の署名を検証する APKMirror など)からのみインストールする、要求された権限がアプリの目的と一致するか確認する、チャットや SMS で送られてきた未承諾の APK(スミッシング攻撃)は絶対にインストールしない、更新時にアプリの署名を比較する。ZIP へのリネームにより、インストール前に内容を検査できます。
形式の詳細
概要APK ファイルを開くプログラム
技術的詳細
詳細仕様| エンコーディング | バイナリ |
| バイトオーダー | リトルエンディアン |
| コンテナ | ZIP アーカイブ (JAR としても有効) |
| 圧縮 | エントリごとに DEFLATE。アライメントに敏感なエントリは非圧縮(STORED メソッド)で保存され、zipaligned される |
| 署名 / 整合性 | APK Signature Scheme v2/v3 (ZIP セントラルディレクトリの前にブロックを挿入)。デバイス上の増分更新用の v4。署名不一致時はインストール拒否 |
| マジックバイト | 50 4B 03 04 - オフセット 0 にある標準的な ZIP «PK» ローカルファイルヘッダー。AndroidManifest.xml と classes.dex の存在により通常の ZIP と区別される |
| 内部ファイル | AndroidManifest.xml, classes.dex (+ classes2.dex …), resources.arsc, res/, lib/, assets/, META-INF/ |
| バイトコード | classes.dex 内の Dalvik Executable (DEX) - Java/Kotlin ソースからコンパイルされ、ART (Android Runtime) によって実行される |
| アライメント | zipalign が非圧縮エントリに対して 4 バイト境界を強制。Android 15+ は 16 KB ページアライメントを対象とする |
| マニフェスト形式 | バイナリエンコードされた XML (AXML)。パッケージ名、権限、Activity/Service/Provider コンポーネント、minSdkVersion, targetSdkVersion を宣言 |
| ネイティブライブラリのレイアウト | アーキテクチャごとの lib/<ABI>/ サブディレクトリ: arm64-v8a, armeabi-v7a, x86, x86_64 |
| リソーステーブル | resources.arsc - 整数のリソース ID を文字列、レイアウト、ドローアブル、および構成バリアントにマッピングするフラットバイナリファイル |
| 典型的なサイズ | 2 MB - 1.5 GB。ベースアプリ APK は通常 5-100 MB。アセットを同梱したゲームは上限に達する場合がある |
| MIME タイプ | application/vnd.android.package-archive |
| プラットフォーム | Android (ネイティブ)。エミュレータ (BlueStacks, Android Studio AVD, Waydroid) を介して Windows, Linux, macOS で実行可能 |
| リリース日 | 2008 (Android 1.0) |
| 最新バージョン | APK Signature Scheme v3 (Android 9, 2018); v4 incremental (Android 11, 2020) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | source.android.com |