ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
要点
- APK(Android Package、.apk)は、Android アプリの配布・インストール用ファイル形式。
- 実体は ZIP であり、
AndroidManifest.xml(バイナリ XML)、classes.dex、res/、resources.arsc、ネイティブライブラリ(lib/<abi>/)、署名情報を内包する。 - Play ストア配布は現在 AAB(Android App Bundle)が必須だが、デバイスへ最終的にインストールされるのは依然として APK(端末ごとに最適化されたもの)。
- 署名は APK Signature Scheme v1〜v4。
apksignerで付与し、未署名 APK はインストールできない。
概要
APK は 2008 年の Android 1.0 から続くアプリ配布形式で、JAR(Java Archive)の構造を Android 向けに拡張したものとして始まった。基底は ZIP なので アーカイブ・圧縮形式の一種だが、内部に Android ランタイムが期待する固有のレイアウトを持つ点でアプリパッケージとして独立した存在になっている。
Google Play は 2021 年から新規アプリに AAB(.aab)を必須化したが、AAB は配布前段階のフォーマットであり、Play 側で端末ごとの APK(Split APK)に再パッケージされてからユーザー端末に届く。つまり「端末上の実体は今も APK」という構造は変わっていない。
内部構造
APK を unzip -l app.apk で覗くと、典型的に次のメンバが含まれる。
- AndroidManifest.xml — アプリのパーミッション、エントリポイント、最小 SDK、Activity / Service / Receiver の宣言。テキスト XML ではなくバイナリ XML(AXML)として格納されている。
- classes.dex / classes2.dex … — Java/Kotlin バイトコードを Android 用にコンパイルしたDalvik Executable。Multidex で複数になる。
- resources.arsc — リソース ID と値(文字列、寸法、カラーなど)のテーブル
- res/ — レイアウト XML、drawable、mipmap などのリソース
- assets/ — フォントや任意データなど、生のファイル
- lib/<abi>/ —
arm64-v8a、x86_64等のネイティブ.so - META-INF/ —
MANIFEST.MF、CERT.SF、CERT.RSA等の署名情報(v1 署名の場合)
AndroidManifest.xml は AAPT2 でコンパイル後、AXML としてバイナリ化される。apktool でデコードするとテキスト XML が復元され、たとえば次のような内容を確認できる。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.helloworld">
<application android:label="Hello">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
主な用途
- Google Play 経由のアプリ配布(端末側に届く最終形は APK)
- サードパーティストア配布 — Amazon Appstore、Galaxy Store、F-Droid、Huawei AppGallery など
- サイドローディング — Web から直接
.apkをダウンロードしてインストール。「提供元不明のアプリ」設定が必要 - 社内配布(MDM/EMM) — Intune、Workspace ONE、Google Endpoint Management 経由の業務アプリ配布
- 動作確認・QA —
adb install app.apkで開発端末に直接導入
関連形式との比較
- vs AAB(.aab) — AAB は Google Play への提出形式で、Play が端末ごとに最適化された Split APK を生成して配信する。AAB 単体ではインストールできない。
- vs IPA — IPA は iOS 用、APK は Android 用。どちらも ZIP ベースだが、配布制限や署名スキーム、リサインポリシーが大きく異なる。
- vs EXE / MSI — APK はモバイル OS のサンドボックスを前提とした宣言的パーミッションモデル。EXE/MSI はデスクトップ OS 上で広い権限を持ち得る。
- vs ZIP — APK は ZIP として展開できるが、最終的に署名検証されることを前提に作られている点が異なる。
コマンド・ツール
adb install app.apk— 接続中の端末/エミュレータへインストールadb install -r app.apk— 既存を上書き再インストール(署名一致が必要)adb shell pm list packages— インストール済みパッケージ一覧aapt2 dump badging app.apk— パッケージ名・バージョン・パーミッション等の確認apksigner sign --ks key.jks app.apk— APK Signature Scheme v2/v3/v4 で署名apksigner verify -v app.apk— 署名検証zipalign -v 4 unsigned.apk aligned.apk— 4 バイト整列(v2 署名前に必要)apktool d app.apk/apktool b dir— 逆コンパイル / 再パック(解析・ローカライズなど)bundletool build-apks --bundle=app.aab --output=app.apks— AAB から Split APK セットを生成
注意点
- 署名の鍵を絶対に失わない。Play Console での更新は同じ鍵での署名が必須。Play App Signing に登録していれば Google 側が保持してくれるが、登録していない場合は鍵紛失 = アプリ更新不能になる。
- v1 のみの署名は脆弱。Android 7.0 以降の v2 以上を併用すること。
apksignerは--v1-signing-enabled/--v2-signing-enabledなどで個別に制御できる。 - サイドロード APK の出所には十分注意。野良 APK は不正アプリの主要な経路で、EXE 同様にマルウェアになり得る。
- パーミッションは AndroidManifest で宣言済みのものしか使えない。実行時パーミッション(位置情報、カメラなど)はランタイムで再度ユーザー承認が必要。
- 64bit ABI 必須(Google Play では 64bit ライブラリ同梱が必須)。
arm64-v8aを欠かすと配布拒否される。 - クロスサイトナビ禁止のため、本記事から外部サイトの解析記事には直接リンクしない。
関連リンク
- 実行ファイル・パッケージ(親カテゴリ)
- ファイル拡張子とは(概論)
- IPA(.ipa)(iOS の対応形式)
- アーカイブ・圧縮形式(APK は ZIP ベース)
- EXE(.exe) / MSI(.msi)(Windows 側のインストーラ)
- DEB / RPM(Linux 側のパッケージ)
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Scratch 作品の公開方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?