zipalign

zipalignis 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.

Usezipalignto 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 usezipalignto 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 usezipalignat a specific point in the build process. That point depends on which app-signing tool you use:

  • If you useapksigner,zipalign must be usedbeforethe APK file has been signed. If you sign your APK usingapksignerand make further changes to the APK, its signature is invalidated.
  • If you usejarsigner (not recommended),zipalignmust be usedafterthe APK file has been signed.

To achieve alignment,zipalignalters the size of the"extra"field in the zipLocal File Header sections. This process can also alter existing data in the"extra"fields.

Usage

If your APK contains shared libraries (.sofiles), use-p to ensure that they're aligned to a 4KiB page boundary suitable formmap(2).For other files, whose alignment is determined by the mandatory alignment argument to zipalign,Android Studio aligns to 4 bytes on both 32-bit and 64-bit systems.

To aligninfile.apkand save it asoutfile.apk:

zipalign -p -f -v 4 infile.apk outfile.apk

To confirm the alignment ofexisting.apk,use the following command. If you use Android Studio or AGP to build, this is the command you should use to verify that your APK is aligned.

zipalign -c -v 4 existing.apk

Options

The following table lists the availablezipalignoptions:

Option Description
-c Checks alignment only (does not modify file).
-f Overwrites existing output file.
-h Displays tool help.
-p Page-aligns uncompressed.sofiles.
-v Verbose output.
-z Recompresses using Zopfli.