I. APK ファイルとは何ですか?
APK
( Android
application
package
) は、Android
アプリケーションの構築と公開における重要なコンポーネントです。APK
ファイルは、アプリケーションのコード、リソース、マニフェスト情報を組み合わせて、デバイスにインストールして実行できるようにするアプリケーションのパッケージ化形式です。
「インストール パッケージ」と呼ばれるこれは、本質的にはzip
圧縮されたパッケージです。
II. APK ファイルのコンポーネント
一般的なファイル構成は以下の通りですが、その他のファイルやディレクトリ等が存在する場合もあります。
名前 | ディレクトリ/ファイル | 簡単な分析 |
---|---|---|
資産 | 目次 | 静的リソースファイル |
ライブラリ | 目次 | ライブラリファイル |
メタINF | 目次 | 署名ファイル |
レス | 目次 | リソースファイルをコンパイルする |
AndroidManifest.xml | 書類 | 構成マニフェストファイル |
クラス.dex | 書類 | コアコードファイル |
リソース.arsc | 書類 | リソースマッピングファイル |
詳しい説明
アセット:静的リソース
assets
HTML
このディレクトリは、オーディオ ファイル、ビデオ ファイル、ファイルなど、アプリケーションの元の静的ファイルを保存するために使用されます。
lib: ライブラリ
lib
このディレクトリはアプリケーションのローカル ライブラリ ディレクトリであり、特定のハードウェア アーキテクチャに関連するローカル ライブラリ ファイルを保存するために使用されます。
META-INF: 署名
META-INF
ディレクトリには、APK
ファイルの整合性と署名に関連する情報が保存されます。これらのファイルはAPK
ビルドおよび署名プロセス中に自動的に生成され、その役割は主にアプリケーションのセキュリティと検証に関連します。
一部のディレクトリはAPK
解凍後に表示されませんMETA-INF
。これは、V2
使用されている署名が原因である可能性があります。V2
署名情報はAPk
圧縮パッケージのファイル構造(データ領域と中央ディレクトリの間)に挿入されるため、解凍されません。APK
この記事では署名方法については説明していませんが、Android v1、v2、v3 の署名についてはこの記事で詳しく説明されています。
このディレクトリには次のファイルが含まれています。
1.MANIFEST.MF(マニフェストファイル)
MANIFEST.MF
APK
ファイルのメインのマニフェスト ファイルです。APK
これには、作成時間、変更時間、バージョン番号など、ファイルに関連するメタデータ情報が含まれます。- マスター マニフェスト ファイルには、ファイルの整合性
APK
を確保するために、ファイルに含まれる他のマニフェスト ファイルの名前とハッシュが記録されますAPK
。
2. CERT.RSA (RSA 証明書)
CERT.RSA
ファイルには、APK
ファイルのデジタル署名情報が含まれています。APK
ビルド プロセス中に、開発者はAPK
デジタル証明書を使用してファイルに署名します。APK
デジタル署名は、ファイルの作成元と完全性を保証し、APK
配布プロセス中にファイルが改ざんされたり、悪意を持って変更されたりすることを防ぐメカニズムです。Android
デバイスはアプリケーションをインストールするときに、CERT.RSA
ファイル内の署名情報を検証して、APK
ファイルが正規の開発者によって署名されていることを確認します。
注: 直接解凍して取得したファイルは暗号化されてCERT.RSA
いるため、などのツールを使用して表示するRSA
必要があります。openssl
openssl pkcs7 -inform DER -in CERT.RSA -text -noout -print_certs
3. CERT.SF (署名ファイル)
CERT.SF
ファイルにAPK
は、ファイル内のすべてのリソース ファイルのハッシュとマニフェスト ファイルのハッシュが含まれています。署名プロセス
中に、マニフェスト ファイル内の各エントリがハッシュ化され、ファイルに記録されます。APK
CERT.SF
APK
ファイルをインストールするとき、Android
デバイスはCERT.SF
ファイルを検証して、ハッシュ値APK
が実際のリソース ファイルおよびマニフェスト ファイルと一致していることを確認し、改ざんや変更を防ぎます。したがって、インストール時間は比較的遅くなります。これは、ファイル内に多くのリソース ファイルが含まれており、署名の検証が必要であるAPK
ためである可能性があります。APK
res: リソース
res
ディレクトリとは、APK
リソースファイルが格納されるディレクトリのことで、レイアウトファイルや画像ファイル、文字列リソースなど、アプリケーションが使用するさまざまなリソースが含まれています。- レイアウト ファイル (
layout
) は、アプリケーション インターフェイスの構造とコンポーネントの場所を定義します。 - 画像ファイル (
drawable
) には、アプリケーションで使用されるアイコンや背景画像などの画像リソースが含まれています。 - 文字列リソース (
values
) には、国際化およびローカリゼーションのためにアプリケーションで使用されるテキスト文字列が格納されます。
AndroidManifest.xml: アプリケーションマニフェストファイル
- マニフェスト ファイルは
APK
ファイルの中核コンポーネントであり、アプリケーションの基本情報と特性が記述されています。 - マニフェスト ファイルには、アプリケーションのパッケージ名、バージョン番号、権限要件、およびアクティビティ (
Activity
)、サービス (Service
)、ブロードキャスト レシーバー (Broadcast Receiver
)、コンテンツ プロバイダー (Content Provider
) などのコンポーネントの宣言が含まれています。 - マニフェスト ファイルは
Android
アプリケーションの全体的な構造をシステムに通知し、システムがアプリケーションのさまざまなコンポーネントを正しくロードして起動できるようにします。
※直接解凍しAPK
たものはAndroidManifest.xml
圧縮されており、直接開くと文字化けしますが、関連ツール( AndroidStudio
、、など)を使用するとjadx
解凍できます。
classes.dex: Dalvik バイトコード ファイル
classes.dex
ファイルはAPK
ファイル内のバイトコード ファイルであり、Java
アプリケーションのすべてのコードのコンパイルおよび最適化された結果が含まれます。Dalvik
Android
変換されたバイトコード ファイルを実行できる、システムによって使用される特定の仮想マシンです。classes.dex
ファイル内のバイトコードはDalvik
仮想マシンによって解釈および実行され、Android
デバイス上でアプリケーションを実行できるようになります。
resource.arsc: リソースインデックスファイル
resources.arsc
アプリケーションで使用されるすべてのリソースのインデックス情報が含まれるバイナリ ファイルです。- リソース インデックス ファイルには、各リソースのタイプ、名前、および対応するリソースが記録されます
ID
。 Android
システムは、リソース インデックス ファイルを解析することで、アプリケーションに必要なリソースに迅速にアクセスしてロードできます。