zipalign
Stay organized with collections
Save and categorize content based on your preferences.
zipalign
is a zip archive alignment tool that helps ensure that all uncompressed files
in the archive
are aligned relative to the start of the file. This lets the files be accessed directly via
mmap(2)
, removing the need to copy this data in RAM and reducing your app's memory usage.
Use zipalign
to optimize your APK file before distributing it to
end users. If you build using Android Studio, which uses the Android Gradle plugin (AGP), this is
done automatically. In this case, you should still use zipalign
to verify that the APK
is aligned, but you don't need to align it. This documentation is mainly for maintainers of
custom build systems.
Caution: You must use zipalign
at a specific point in
the build process. That point depends on which app-signing tool you use:
-
If you use
apksigner
, zipalign
must be used before the APK file has been signed. If you sign your
APK using apksigner
and make further changes to the APK, its signature is invalidated.
-
If you use
jarsigner
(not recommended), zipalign
must be used after the APK file has
been signed.
To achieve alignment, zipalign
alters the size of the "extra"
field in the zip Local File Header
sections. This process can also alter existing data in the "extra"
fields.
Usage
If your APK contains shared libraries (.so
files), use -P 16
to ensure that they're aligned to a 16KiB page boundary suitable for mmap(2)
in both 16KiB and 4KiB devices. For other files, whose alignment is determined by the
mandatory alignment argument to zipalign
, should be aligned to 4 bytes
on both 32-bit and 64-bit systems.
To align infile.apk
and save it as outfile.apk
:
zipalign -P 16 -f -v 4 infile.apk outfile.apk
To confirm the alignment of existing.apk
, use the following command.
zipalign -c -P 16 -v 4 existing.apk
Options
The following table lists the available zipalign
options:
Option |
Description |
-c |
Checks alignment only (does not modify file). |
-f |
Overwrites existing output file. |
-h |
Displays tool help. |
-P <pagesize_kb> |
aligns uncompressed .so files to the specified page size in KiB. Valid options
for <pagesize_kb> are 4, 16, and 64. |
-p |
4KiB page-aligns uncompressed .so files. It is recommended to use
-P 16 instead, as -p is deprecated. |
-v |
Verbose output. |
-z |
Recompresses using Zopfli. |
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2024-08-15 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-08-15 UTC."],[],[],null,["# zipalign\n\n`zipalign` is a zip archive alignment tool that helps ensure that all uncompressed files\nin the archive\nare aligned relative to the start of the file. This lets the files be accessed directly via\n[mmap(2)](https://man7.org/linux/man-pages/man2/mmap.2.html)`\n`, removing the need to copy this data in RAM and reducing your app's memory usage.\n\nUse `zipalign` to optimize your APK file before distributing it to\nend users. If you build using Android Studio, which uses the Android Gradle plugin (AGP), this is\ndone automatically. In this case, you should still use `zipalign` to verify that the APK\nis aligned, but you don't need to align it. This documentation is mainly for maintainers of\ncustom build systems. \n\n**Caution:** You must use `zipalign` at a specific point in\nthe build process. That point depends on which app-signing tool you use:\n\n- If you use [apksigner](/studio/command-line/apksigner), `zipalign` must be used **before** the APK file has been signed. If you sign your APK using `apksigner` and make further changes to the APK, its signature is invalidated.\n- If you use [jarsigner](//docs.oracle.com/javase/tutorial/deployment/jar/signing.html) (not recommended), `zipalign` must be used **after** the APK file has been signed.\n\nTo achieve alignment, `zipalign` alters the size of the `\"extra\"` field in the zip **Local File Header**\nsections. This process can also alter existing data in the `\"extra\"` fields.\n\nUsage\n-----\n\nIf your APK contains shared libraries (`.so` files), use `-P 16`\nto ensure that they're aligned to a 16KiB page boundary suitable for `mmap(2)`\nin both 16KiB and 4KiB devices. For other files, whose alignment is determined by the\nmandatory alignment argument to `zipalign`, should be aligned to 4 bytes\non both 32-bit and 64-bit systems.\n\nTo align `infile.apk` and save it as `outfile.apk`: \n\n```\nzipalign -P 16 -f -v 4 infile.apk outfile.apk\n```\n\nTo confirm the alignment of `existing.apk`, use the following command. \n\n```\nzipalign -c -P 16 -v 4 existing.apk\n```\n\n### Options\n\nThe following table lists the available `zipalign` options:\n\n| Option | Description |\n|--------------------|-------------------------------------------------------------------------------------------------------------------------|\n| -c | Checks alignment only (does not modify file). |\n| -f | Overwrites existing output file. |\n| -h | Displays tool help. |\n| -P \\\u003cpagesize_kb\\\u003e | aligns uncompressed `.so` files to the specified page size in KiB. Valid options for `\u003cpagesize_kb\u003e` are 4, 16, and 64. |\n| -p | 4KiB page-aligns uncompressed `.so` files. It is recommended to use `-P 16` instead, as `-p` is deprecated. |\n| -v | Verbose output. |\n| -z | Recompresses using Zopfli. |"]]