The Android Developer Challenge is back! Submit your idea before December 2.

zipalign

zipalign 是一种归档对齐工具,可对 Android 应用文件进行重要的优化。其目的是要确保所有未压缩数据的开头均相对于文件开头部分执行特定的对齐。具体来说,它会使 APK 中的所有未压缩数据(例如图片或原始文件)在 4 字节边界上对齐。这样一来,即可使用 mmap() 直接访问所有部分,即使其中包含具有对齐限制的二进制数据也没关系。这样做的好处是可以减少运行应用时消耗的 RAM 容量。

在将 APK 文件分发给最终用户之前,必须先使用此工具对齐文件。您可以使用 Android 编译工具来完成此操作。Android Studio 会自动对齐您的 APK。

注意:您必须在应用编译过程中的两个特定时间点之一使用 zipalign,具体在哪个时间点使用,取决于您所使用的应用签名工具:

  • 如果您使用的是 apksigner,则只能在为 APK 文件签名之前执行 zipalign。如果您在使用 apksigner 为 APK 签名之后对 APK 进行进一步更改,则签名将会失效。
  • 如果您使用的是 jarsigner,则只能在为 APK 文件签名之后执行 zipalign。

您可以通过更改 zip 本地文件标头部分中的“extra”字段的大小来进行调整。此过程可能会更改“extra”字段中的现有数据。

要详细了解在编译应用时如何使用 zipalign,请参阅为应用签名

用法

要对齐 infile.apk 并将其保存为 outfile.apk,请执行以下命令:

zipalign [-f] [-v] <alignment> infile.apk outfile.apk

要确认 existing.apk 的对齐方式,请执行以下命令:

zipalign -c -v <alignment> existing.apk

<alignment> 是一个整数,用于定义字节对齐边界。此值必须始终为 4(可提供 32 位对齐),否则实际将不会执行任何操作。

标记:

  • -f:覆盖现有的 outfile.zip
  • -v:详细输出
  • -p:outfile.zip 应对 infile.zip 中的所有共享对象文件使用相同的页面对齐方式
  • -c:确认给定文件的对齐方式