Android App Bundle
Google Play publishing format packaging `BundleConfig.pb`, Protocol-Buffer encoded `base/manifest/AndroidManifest.xml`, and DEX bytecode inside a modular ZIP container.
Unlike installable `.apk` files (which place binary-XML `AndroidManifest.xml` at root), `.aab` stores Protobuf-serialized manifests under `<module>/manifest/AndroidManifest.xml` plus root `BundleConfig.pb`. MIME note: `application/x-authorware-bin` seen in legacy MIME databases refers to Adobe Authorware (a historical extension collision), NOT Android App Bundle—serve `.aab` as `application/vnd.android.aab` or fall back to `application/octet-stream`.
Drop any .aab file (even 100 GB+) to inspect locally
Reads tiny File.slice() header/footer pages in a sandboxed Web Worker · 0 Bytes Uploaded
.aab Magic Bytes & Header Offset Map
PKZIP bundle containing BundleConfig.pb & base/manifest/AndroidManifest.xml
| Byte Offset | Length | Data Type | Field Name | Engineering Description |
|---|---|---|---|---|
| 0x00 - 0x03 | 4 B | uint32_le | zip_magic | PKZIP Local File Header |
| 0x1E+ | var | utf8 | bundle_config | 'BundleConfig.pb' protobuf descriptor |
.aab Security & Polyglot Risk Matrix
Distinguish .aab from .apk by requiring root BundleConfig.pb and verifying JAR/APK signature blocks (META-INF/) in release pipelines.
Read .aab Header & Metadata Without Heavy Dependencies
import sys, zipfile
with zipfile.ZipFile(sys.argv[1], "r") as zf:
names = set(zf.namelist())
assert "BundleConfig.pb" in names, "Missing BundleConfig.pb"
print(f"Valid Android AAB ({len(names)} entries)")Deterministic .aab Sample Files & Edge Cases
minimal-base.aab
UNSIGNED container-structure fixture: real ZIP with BundleConfig.pb, base/manifest/AndroidManifest.xml and dex\n039 header stub. NOT a Play-signed publishable bundle.
curl -fsSL https://fileformat.co/fixtures/v1/aab/minimal-base.aab -o minimal-base.aab \
&& echo "2564e236b066e8187c9c16be9d3e13332ce02e5d69a7171cf91372d96ebf16f8 minimal-base.aab" | shasum -a 256 -crelease-module.aab
UNSIGNED fixture adding base/resources.pb alongside BundleConfig.pb and classes.dex to distinguish .aab from legacy .apk.
curl -fsSL https://fileformat.co/fixtures/v1/aab/release-module.aab -o release-module.aab \
&& echo "875c6a215d912e50d0274d36512ef9c5b9564b5c10f1822e631636234fe3016d release-module.aab" | shasum -a 256 -ctruncated-bundle.aab
AAB archive truncated inside the ZIP Central Directory — zipfile must raise.
curl -fsSL https://fileformat.co/fixtures/v1/aab/truncated-bundle.aab -o truncated-bundle.aab \
&& echo "af8a9755a801d6c9890cbf897fe1cc1314cfc39a5769e1d56d8418fc8a63883c truncated-bundle.aab" | shasum -a 256 -cRelated Specifications & Alternatives
ZIP-compressed iOS/iPadOS application distribution archive structured around `Payload/<AppName>.app/Info.plist` (`bplist00`) and Mach-O ARM64 binaries.
Portable, sandboxed stack-machine binary bytecode format (`\0asm` v1) structured as a sequence of LEB128-framed Type, Import, Function, Memory, Export, and Code sections.
Cross-framework Protocol Buffers computation graph and weight format used by ONNX Runtime, TensorRT, and CoreML converters.