Skip to content
Back to Blog
informational

APKファイルとは?Androidパッケージを徹底解説

2026-05-17 8 min read

手短に言うと:APKはAndroidアプリのコンテナです

APKファイル、すなわちAndroid Package Kitは、Androidがアプリを配布・インストールするために使用するファイル形式です。これはWindowsの.exeファイルやmacOSの.dmgファイルに相当するAndroid版ですが、アプリに必要なものすべてを1つの圧縮ファイルにまとめています。中には、コンパイルされたコード、リソース、アセット、証明書、そしてOSにアプリの権限を伝えるマニフェストファイルが含まれています。 この形式は、実は特殊なZIPファイルにすぎません。本当ですよ。.apkを.zipにリネームすれば、7-Zipのような標準的なアーカイブツールで開くことができます。中を見ると、標準的なレイアウトになっていることがわかります。`AndroidManifest.xml`はアプリのIDカードのような役割を果たし、`classes.dex`にはコンパイルされたコードが、`res/`フォルダにはレイアウトや画像が、そして`META-INF/`ディレクトリにはパッケージの信頼性を証明する暗号署名が格納されています。 Google Playストアから入手するアプリはすべて、APKとして配信されています。ただ、Playストアがダウンロードとインストールを裏側で管理しているため、ユーザーがそのファイルを目にすることはありません。それ以外の場所からアプリを入手する場合、つまり「サイドローディング」と呼ばれるプロセスでは、APKファイルを自分で扱うことになります。サイドローディングは完全に合法でサポートされているAndroidの機能ですが、設定を切り替える必要があります。Android 8以降では「設定」>「アプリ」>「特別なアプリアクセス」にある「不明なアプリのインストール」を有効にするか、Android 7以前の場合は「設定」>「セキュリティ」にある「提供元不明のアプリ」のトグルをオンにする必要があります。

APKの内部構造

実際のAPKファイルを開いて、Androidアプリがどのように構築されているか見てみましょう。例えば、一般的な天気アプリは18〜25MB程度のファイルで、その中には数百もの個別のファイルが特定のディレクトリに整理されて入っています。 まず`AndroidManifest.xml`です。APK内では、これは開発者が書くような人間が読めるテキストファイルではなく、圧縮されたバイナリXML(AXML)になっています。このファイルはアプリの魂とも言える部分です。パッケージ名(例:`com.example.weatherapp`)、最小およびターゲットのAndroid SDKバージョン、アプリが使用するすべての画面(アクティビティ)とバックグラウンドタスク(サービス)、そして`INTERNET`から`ACCESS_FINE_LOCATION`に至るまで、必要なすべての権限を宣言しています。 次に`classes.dex`があります。このファイル(大規模なアプリでは`classes2.dex`や`classes3.dex`も)には、コンパイルされたアプリケーションのロジックが含まれています。DEXはDalvik Executableの略です。最近のデバイスでは古いDalvik VMの代わりにAndroid Runtime(ART)が使われていますが、この名前は残っています。 `res/`ディレクトリには、コード以外のアセットがすべて格納されています。XMLレイアウトファイル、翻訳文字列、色、アニメーションなどが詰まっています。Android開発の経験がある人なら誰でもこのフォルダをよく知っているでしょう。ここには、解像度ごとのバケット(mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi)に整理されたdrawable画像も含まれています。1つのボタンアイコンが5つの異なる解像度で存在することもあり、これによりAndroidはあらゆる画面に最適なものを選択できます。関連ファイルの`resources.arsc`は、リソースIDをこれらのファイルにマッピングするコンパイル済みのテーブルで、これによりコードは実行時に`R.drawable.ic_launcher`を見つけることができます。 `lib/`ディレクトリには、ネイティブのコンパイル済みライブラリ(.soファイル)がCPUアーキテクチャ別(`armeabi-v7a`, `arm64-v8a`, `x86`, `x86_64`)に格納されています。すべてのアプリに必要というわけではありませんが、ゲームやその他パフォーマンスが重要なアプリケーションではほぼ必ず見られます。

APK vs. AAB:Googleが配布形式を変更した理由

2021年8月、GoogleはPlayストアに新規登録するアプリをAPKではなくAndroid App Bundle(.aab)で提出するよう義務付け、開発者にとってのルールを大きく変えました。この違いは、手動でアプリをインストールしようとして、GitHubからダウンロードした.aabファイルがなぜか動かない、という場合に非常に重要になります。 ここで理解すべき最も重要なことは、AABは*インストール*形式ではなく、*公開*形式であるということです。開発者は、すべての画面密度、CPUアーキテクチャ、言語に対応するコードとリソースをすべてAABにバンドルします。そのAABがGoogle Playにアップロードされると、Googleのサーバーはそれを設計図として使い、あなたの特定のデバイスに合わせた高度に最適化されたAPK(または分割APKのセット)をビルドして提供します。もしあなたがフランス語設定のPixel 7を使っているなら、arm64-v8aライブラリ、xxhdpiリソース、フランス語の文字列だけを含むAPKが配信されます。これにより、ダウンロードサイズはワンサイズ・フィッツオール(汎用)のAPKよりも15〜40%小さくなります。 これが、AABファイルをダウンロードしてそのままインストールできない理由です。あなたのスマートフォンは、バンドルを解析して必要な部分を抽出する方法を知らないのです。GitHubのようなサイトでは、どこでも動作する大きなサイズの汎用APKか、あるいはSAI (Split APKs Installer) のような特別なツールでつなぎ合わせる必要がある分割APKのコレクションが見つかるでしょう。 サイドローディングに関しては、やはり従来のAPKが王様です。実際に扱うのはこの形式になります。APKMirrorのような、手動インストール用のAPKをホストしている信頼できるサイトは、エンドユーザーが追加の手順なしで直接インストールできるため、これらの汎用APKを提供しています。

PCでAPKファイルを開き、調査し、変換する方法

デスクトップでAPKファイルを扱う必要が出てくることには、もっともな理由があります。例えば、アプリのアイコンをフル解像度で抽出したい、インストール前に権限を確認したい、翻訳文字列を抜き出したい、あるいは内部アセットをより使いやすい形式に変換したい、といった場合です。 単純なアセットの取得であれば、APKを.zipにリネームするだけで驚くほどうまくいきます。しかし、本格的な調査、特にバイナリXMLファイルを読み取るには、適切なツールが必要です。私のおすすめは常に`apktool`です。これはバイナリのマニフェストやリソースファイルを人間が読めるテキストに戻してくれます。ターミナルで`apktool d myapp.apk`を実行すると、すべてがフォルダに展開され、要求されているすべての権限を読んだり、アプリがどのAndroid APIレベルでビルドされたかを確認したりするのが容易になります。 画像アセットの抽出と変換が目的であれば、CocoConvertのようなツールを使うと、はるかに高速なワークフローが実現します。手動で解凍してネストされた`res/`フォルダを掘り下げる代わりに、APKを直接アップロードできます。CocoConvertを使えば、PNGアイコン、スプラッシュスクリーン、UIグラフィックを抜き出し、SVG、WebP、JPEGといった希望の解像度のフォーマットに変換できます。この特定のタスクにおいては、大幅な時間節約になります。 ただし、その範囲については明確にしておきましょう。CocoConvertはファイル形式の変換のために作られており、詳細なコード解析用ではありません。DalvikバイトコードをJavaソースコードにリバースエンジニアリングすることが目的なら、`jadx`や、定番の`dex2jar`/`JD-GUI`の組み合わせのような専用のデコンパイラが必要になります。これらは強力な開発者ツールです。同様に、CocoConvertは変更したAPKを再パッケージ化したり、再署名したりすることはできません。それはAndroid SDKのビルドツールと自分自身の署名キーを必要とする複雑なプロセスです。

APKファイルのセキュリティリスク(とその評価方法)

APKをサイドローディングできる自由は、AndroidがiOSに対して持つ真の利点です。しかし、その自由には現実的なセキュリティリスクが伴います。曖昧な警告ではなく、直接的にその問題について話す必要があります。 悪意のあるAPKは神話ではなく、十分に文書化された問題です。詐欺師は人気アプリを入手し、スパイウェア、バンキング型トロイの木馬、アドウェアなどを注入し、偽のアップデートやクラックされたゲームとして再パッケージ化することができます。ESET Mobile Threat Reportは、Androidマルウェアのほとんどが公式のPlayストアではなく、サードパーティのAPKソースから来ていることを一貫して示しています。 ですから、非公式なソースからAPKをインストールする前には、事前に調査する必要があります。まず、暗号署名を検証することから始めましょう。すべての正規のAPKは開発者によって署名されています。これはAndroid SDKのbuild-toolsにある`apksigner verify --print-certs myapp.apk`を使って確認できます。証明書の詳細が開発者の公開鍵と一致しない場合、それは非常に危険な兆候です。次に、マニフェストで権限を検査します。単純な懐中電灯アプリが、あなたのテキストメッセージの読み取り(`READ_SMS`)や音声の録音(`RECORD_AUDIO`)を要求するべきではありません。最後に、常にパッケージ名とバージョン番号を開発者の公式サイトに掲載されているものと照合してください。 デスクトップ上でAPKからアセットを抽出するだけなら、アプリのコードを実行しているわけではないのでリスクは低くなります。それでも、ファイルをまずVirusTotalに通すのは良い習慣です。これは70以上のアンチウイルスエンジンでファイルを1分もかからずにスキャンしてくれます。0/72というスコアが100%の安全を保証するわけではありませんが、15/72なら、すぐにファイルを削除すべき明確なサインです。

一般的なAPKのタスクとそれぞれに適したツール

人々はさまざまな理由でAPKファイルを扱いますが、仕事に適したツールを使うことで大幅な時間を節約できます。ここでは、タスクとツールを対応させるための簡単なガイドを紹介します。 古いバージョンのアプリをインストールしたい場合、最善策はAPKMirrorのような信頼できるソースからダウンロードすることです。APKMirrorは、APKの署名がPlayストアのオリジナルと一致することを検証しています。「不明なアプリのインストール」をファイルマネージャーに対して有効にし、ダウンロードしたAPKをタップし、権限を確認してインストールを確定します。 アプリアイコンや画像アセットを抽出するには、ファイル変換ツールを使うのが最も簡単です。APKをCocoConvertにアップロードすれば、`res/drawable`や`res/mipmap`の中身を閲覧し、必要なPNGを取得して目的の形式に変換できます。これはモックアップを作成するデザイナーや、アセットを再確認する開発者にとって最適です。 インストールせずにマニフェストを読んだり権限を確認したりしたい場合は、`apktool`を使いましょう。無料でオープンソース、クロスプラットフォームです。`apktool d -s myapp.apk`というコマンドは、ソースコードをスキップしてリソースのみをデコードする便利なショートカットなので、マニフェストだけが必要な場合にははるかに高速です。 アプリをJavaソースコードにデコンパイルするには、`jadx`を使用します。これは現在の標準であり、`dex2jar`のような古いツールよりも新しいDEX形式をうまく処理します。そのGUI(`jadx-gui`)もコードをナビゲートするのに優れています。ただし注意点として、アプリが難読化(ProGuardやR8など)を使用している場合、`a.b.c.d`のような無意味なクラス名を眺めることになり、解読するのは悪夢のようです。 APKを変更して再パッケージ化するには、デコード用に`apktool`、変更後に再ビルドするために再び`apktool`、そしてパッケージを準備して再署名するためにAndroid SDKの`zipalign`と`apksigner`が必要になります。これはCocoConvertを含むどのオンラインコンバーターも対応できない複雑なワークフローです。

実際にAPKファイルの変換が必要になるケース

「APK変換」という言葉は非常に異なる意味を持つことがあるため、何が実際に可能で、何が単なる希望的観測にすぎないのかを明確にすることが重要です。 最も一般的で便利な変換の種類は、アセットの抽出です。例えば、デザイナーがプレゼンテーション用にAPKからランチャーアイコンを取得し、PNGからSVGに変換する必要があるかもしれません。あるいは、QAエンジニアが内部のXMLファイルからすべての文字列リソースを抜き出し、翻訳レビューのためにCSVに変換することもあります。これは単純なファイル形式の変換であり、まさにCocoConvertのようなツールが設計されている目的です。 もう一つの実用的なユースケースは、アプリの既存の画像アセットをWebPのようなより効率的な形式に変換することです。GoogleはAPIレベル17(Android 4.2)以降、AndroidでのWebP利用を推進してきました。なぜなら、同等の品質でPNGと比較してファイルサイズを25〜34%削減できるからです。古いアプリのPNGを抽出し、WebPに一括変換するのは賢い最適化です。 さて、ここからは*できない*ことです。AndroidのAPKをiOSのIPAファイルに変換することはできません。不可能です。プラットフォームは、コンパイルされたコードやUIフレームワークから、セキュリティモデルやランタイム環境に至るまで、根本的に異なります。APKにはAndroid上で動作するDalvikバイトコードが含まれており、そのどれもiOSでは実行されません。ワンクリックでのAPKからIPAへの変換を提供すると主張するサービスは、いかがわしい商品を売っているだけです。せいぜい、アプリケーションのゼロからの完全な書き直しを説明しているにすぎず、それはもはや「変換」ではありません。 同様に、APKをWindowsのEXEファイルに変換することも現実的ではありません。BlueStacksやWindows Subsystem for AndroidのようなAndroidエミュレータは、Windows上でAPKを*実行*するために完全なAndroid環境を作成します。それらはアプリのコードを魔法のようにネイティブのWindows実行可能ファイルに変換するわけではありません。大きな約束を掲げるツールを見たときには、この違いを理解することが重要です。

APKファイルとは?Androidパッケージを徹底解説 | CocoConvert Blog