zipalign

zipalign 是 ZIP 封存檔對齊工具,可協助確保封存檔中所有的未壓縮檔案都以檔案的開頭為準對齊。這樣就能直接透過 mmap(2) 存取檔案,不必複製 RAM 中的資料,並可降低應用程式的記憶體用量。

將 APK 檔案發布給使用者前,請先使用 zipalign 最佳化該檔案。如果您是透過 Android Studio 使用 Android Gradle 外掛程式 (AGP) 進行建構,系統會自動完成這項作業。在這種情況下,您仍應使用 zipalign 驗證 APK 是否對齊,但您不需要自行對齊。本說明文件的主要適用對象為自訂建構系統的維護者。

注意:您必須在建構程序的特定時間點使用 zipalign,實際時機取決於您使用的應用程式簽署工具:

  • 如果您使用的是 apksigner,就必須在簽署 APK 檔案之前使用 zipalign。如果您在使用 apksigner 簽署 APK 後,再對 APK 做出變更,簽名就會失效。
  • 如果您使用的是 jarsigner (非建議做法),則必須在簽署 APK 檔案之後使用 zipalign

為了確實對齊,zipalign 會變更 ZIP「Local File Header」部分中的 "extra" 欄位大小。這項程序可能也會變更 "extra" 欄位中的現有資料。

使用方式

如果您的 APK 含有共用資料庫 (.so 檔案),請使用 -p 確保其與適合 mmap(2) 的 4KiB 頁面邊界對齊。至於其他由 zipalign 的必要對齊引數確定對齊的檔案,Android Studio 在 32 位元和 64 位元系統上皆會與 4 個位元組對齊。

如何對齊 infile.apk,並將其儲存為 outfile.apk

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

如要確認 existing.apk 是否對齊,請使用下列指令。如果您使用 Android Studio 或 AGP 進行建構,請使用這個指令驗證 APK 是否對齊。

zipalign -c -v 4 existing.apk

選項

下表列出可用的 zipalign 選項:

選項 說明
-c 僅檢查對齊方式 (不會修改檔案)。
-f 覆寫現有的輸出檔案。
-h 顯示工具說明。
-p 將未壓縮的 .so 檔案進行頁面對齊。
-v 詳細輸出模式。
-z 使用 Zopfli 重新壓縮。