Tại sao các tệp APK cần phải được ký?
Mọi ứng dụng Android đều phải được ký điện tử trước khi có thể cài đặt. Chữ ký phục vụ một số mục đích:
- Xác minh danh tính của nhà phát triển ứng dụng
- Đảm bảo APK không bị giả mạo
- Cho phép Android khớp các bản cập nhật ứng dụng với bản gốc
- Cần thiết để cài đặt trên tất cả các thiết bị Android
Cần có công cụ dành cho máy tính để bàn
Việc ký APK yêu cầu các công cụ dòng lệnh (JDK / Android SDK). Điều này không thể được thực hiện trong trình duyệt web. Thực hiện theo hướng dẫn bên dưới để ký APK trên máy tính của bạn.
Cách 1: Ký bằng apksigner (Khuyến nghị)
apksigner là công cụ ký APK chính thức của Google, được bao gồm trong Công cụ xây dựng SDK Android.
Bước 1: Tạo kho khóa
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Bước 2: Ký APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Bước 3: Xác minh chữ ký
apksigner verify --verbose signed-app.apk
Cách 2: Ký bằng jarsigner (Legacy)
# Sign
jarsigner -verbose -sigalg SHA256withRSA \
-digestalg SHA-256 \
-keystore my-release-key.jks \
app-unsigned.apk my-key-alias
# Verify
jarsigner -verify -verbose app-signed.apk
Bước 4: Zipalign (Quan trọng!)
Sau khi ký, hãy tối ưu hóa APK bằng zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Ký gỡ lỗi (Để kiểm tra)
Đối với mục đích thử nghiệm, bạn có thể sử dụng kho khóa gỡ lỗi mặc định của Android:
# Location of debug keystore:
# Linux/Mac: ~/.android/debug.keystore
# Windows: C:\Users\{USERNAME}\.android\debug.keystore
# Sign with debug key
apksigner sign --ks ~/.android/debug.keystore \
--ks-key-alias androiddebugkey \
--ks-pass pass:android \
app.apk
So sánh công cụ ký kết
| Tiêu chí | apksigner | người làm nghề đóng hũ |
|---|---|---|
| Chữ ký V1 | ||
| Chữ ký V2 | ||
| Chữ ký V3 | ||
| Khuyến khích | Di sản |
Người ký APK - Câu hỏi thường gặp
Các câu hỏi thường gặp về ký APK, kho khóa và ký mã Android
Tại sao thứ tự căn chỉnh (zipalign Trước apksigner) lại quan trọng trên Android 11–15
Một trong những lỗi thường gặp nhất mà các nhà phát triển và người kiểm duyệt mắc phải khi ký APK đã sửa đổi hoặc hợp nhất là chạy zipalign sau đó ký gói—hoặc sử dụng tiện ích jarsigner cũ của Java thay vì SDK Android apksigner của Google. Vì Lược đồ chữ ký APK v2 và v3 tính toán hàm băm mật mã trên toàn bộ bố cục nhị phân của kho lưu trữ ZIP nên việc sửa đổi độ lệch byte bằng zipalign sau khi ký sẽ ngay lập tức làm mất hiệu lực khối chữ ký v2/v3.
Bắt đầu từ Android 11 (API cấp 30) và được thực thi nghiêm ngặt trên Android 14 và 15, PackageManager yêu cầu hai điều kiện không thể thương lượng đối với bất kỳ APK nào nhắm mục tiêu đến các cấp SDK hiện đại:
- resources.arsc được căn chỉnh 4 byte không nén: Bảng tài nguyên đã biên dịch (resources.arsc) phải được lưu trữ không nén (STORED) và căn chỉnh trên ranh giới 4 byte để Android có thể ánh xạ bộ nhớ (mmap) trực tiếp mà không cần sao chép vào RAM. Luôn thực hiện ký zipalign -p -f -v 4 input.apk aligned.apk trước.
- Khối chữ ký v2+ bắt buộc: Việc ký API nhắm mục tiêu APK 30+ bằng jarsigner (chỉ viết chữ ký v1 META-INF/) sẽ khiến Android 11–15 từ chối cài đặt với INSTALL_PARSE_FAILED_NO_CERTIFICATES. Sử dụng trình tạo lệnh tương tác ở trên để xây dựng lệnh apksigner --v2-signing-enabled=true chính xác cho kho khóa của bạn hoặc xác minh đầu ra đã ký của bạn trong Trình xác minh chữ ký APK của chúng tôi.