zipalign
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
zipalign
là một công cụ căn chỉnh tệp lưu trữ zip giúp đảm bảo mọi tệp không nén trong kho lưu trữ được căn chỉnh tương ứng với phần đầu tệp. Công cụ này cho phép truy cập trực tiếp vào các tệp thông qua mmap(2)
, giúp hạn chế việc phải sao chép dữ liệu này trong RAM và làm giảm mức sử dụng bộ nhớ của ứng dụng.
Hãy sử dụng zipalign
để tối ưu hoá tệp APK trước khi phân phối cho người dùng cuối. Nếu bạn dùng Android Studio để xây dựng ứng dụng, trình bổ trợ Android cho Gradle (AGP) sẽ tự động thực hiện việc này. Trong trường hợp đó, bạn vẫn nên sử dụng zipalign
để xác minh tệp APK đã được căn chỉnh nhưng bạn không cần phải tự mình thực hiện thao tác này. Tài liệu này chủ yếu dành cho những nhà bảo trì hệ thống xây dựng tuỳ chỉnh.
Thận trọng: Bạn cần phải sử dụng zipalign
tại một điểm cụ thể trong quy trình xây dựng. Điểm đó tuỳ thuộc vào công cụ ký ứng dụng mà bạn dùng:
-
Nếu sử dụng
apksigner
, bạn phải dùng zipalign
trước khi tệp APK được ký. Nếu bạn ký vào tệp APK bằng apksigner
và thực hiện thêm các thay đổi đối với tệp APK này thì chữ ký sẽ không hợp lệ.
-
Nếu sử dụng
jarsigner
(không nên), bạn phải dùng zipalign
sau khi tệp APK được ký.
Để căn chỉnh được, zipalign
sẽ thay đổi kích thước của trường "extra"
trong phần Local File Header (Tiêu đề tệp cục bộ) của tệp zip. Quá trình này cũng có thể thay đổi dữ liệu hiện có trong các trường "extra"
.
Cách sử dụng
Nếu APK của bạn chứa thư viện chia sẻ (tệp .so
), hãy sử dụng -P 16
để đảm bảo chúng phù hợp với ranh giới trang 16 KiB, phù hợp với mmap(2)
trong cả thiết bị 16KiB và 4KiB. Đối với các tệp khác, việc căn chỉnh được xác định bởi giá trị
đối số căn chỉnh bắt buộc thành zipalign
, phải được căn chỉnh thành 4 byte
trên cả hệ thống 32 bit và 64 bit.
Để căn chỉnh infile.apk
và lưu tệp dưới dạng outfile.apk
:
zipalign -P 16 -f -v 4 infile.apk outfile.apk
Để xác nhận cách căn chỉnh của existing.apk
, hãy dùng lệnh sau.
zipalign -c -P 16 -v 4 existing.apk
Tùy chọn
Bảng sau đây liệt kê các tuỳ chọn zipalign
hiện có:
Tuỳ chọn |
Nội dung mô tả |
-c |
Chỉ kiểm tra cách căn chỉnh (không sửa đổi tệp). |
-f |
Ghi đè tệp đầu ra hiện có. |
-h |
Hiện thông tin trợ giúp về công cụ. |
-P <pagesize_kb> |
căn chỉnh các tệp .so không nén theo kích thước trang đã chỉ định trong KiB. Lựa chọn hợp lệ
cho <pagesize_kb> là 4, 16 và 64. |
-p |
Căn chỉnh trang 4KiB cho tệp .so không nén. Bạn nên sử dụng
Thay vào đó, -P 16 , vì -p không được dùng nữa. |
-v |
Chế độ đầu ra chi tiết. |
-z |
Nén lại bằng Zopfli. |
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 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. |"]]