Mục lục
Ký APK nghĩa là đóng dấu gói ứng dụng bằng khóa mã hóa của bạn để Android xác minh ai đã xây dựng nó và rằng không ai sửa đổi nó sau đó. Dùng apksigner từ SDK build tools, menu ký trong MT Manager, hoặc bước rebuild trong APK Editor, rồi xác minh chứng chỉ trước khi cài. Hãy chỉ ký những gói bạn sở hữu hoặc tự rebuild, và bảo vệ keystore như một mật khẩu.
Thuộc trung tâm mod: Cách mod APK · Đến từ: Rebuild APK · Xác minh: Kiểm tra chữ ký APK.
Bởi Abdul Emam, người kiểm thử APK tại ApkZena. Tôi từng ký ba bản build thử với ba khóa khác nhau trong một buổi chiều, và không cái nào cập nhật đè lên cái nào. Một keystore cho mỗi dự án, sao lưu hai lần, đã chấm dứt mớ hỗn độn đó. Một khóa. Hai bản sao lưu.
Hướng dẫn này bao gồm việc ký là gì, bốn lược đồ chữ ký, cách tạo keystore, ba con đường ký, các lỗi bạn sẽ gặp, và cách xác minh. Mỗi lệnh được hiển thị đúng như khi gõ.
Ký APK là gì?
Ký APK đính kèm một chữ ký mã hóa được tạo bằng khóa ký, cho phép Android xác minh tính toàn vẹn của gói và đối chiếu danh tính của bản cập nhật; Android kiểm tra chữ ký đó trong lúc cài đặt và cập nhật, và từ chối bản cập nhật được ký bằng khóa không tương thích cho cùng gói.
Vì sao Android bắt buộc chữ ký
Không có chữ ký, bất kỳ tệp đóng gói lại nào cũng có thể âm thầm thay thế ứng dụng ngân hàng của bạn trong một lần cập nhật. Chữ ký gắn các bản cập nhật với tác giả gốc, và chính vì thế bản rebuild đã mod của bạn không bao giờ cập nhật đè lên bản của cửa hàng: khóa khác, danh tính khác.
Ký debug và ký release
Khóa debug được tự tạo cho mỗi máy khi phát triển và không bao giờ được rời khỏi bàn làm việc của bạn. Khóa release nằm trong keystore và định nghĩa danh tính vĩnh viễn của ứng dụng qua nhiều năm cập nhật. Trộn lẫn chúng cho ra những bản build cài ngon lành rồi bỏ rơi người dùng.
Các lược đồ chữ ký APK
Ký APK trên Android gồm các lược đồ v1, v2, v3 và v4 với các vai trò tương thích và giao hàng khác nhau; việc biết công cụ build của bạn áp lược đồ nào giúp bạn xác minh yêu cầu hỗ trợ của thiết bị mà không phải đổi tùy chọn ký không cần thiết cho một bản build cục bộ hay bài test.
v1 (ký JAR)
Ký từng mục ZIP riêng lẻ, lược đồ Java gốc mà Android kế thừa. Chậm khi xác minh các gói lớn và mù trước một số can thiệp cấp ZIP, nhưng vẫn bắt buộc với thiết bị trước Android 7. Hãy giữ nó để có độ tương thích tối đa.
v2 (APK Signature Scheme v2)
Ký toàn bộ APK như một khối, xác minh trong một lượt khi cài. Nhanh và mạnh hơn v1, bắt buộc trên các mục tiêu hiện đại, và được ghi trong tài liệu tham chiếu APK Signature Scheme của Google. Đây là lược đồ đang làm việc thật sự ngày nay.
v3 (xoay khóa)
Mở rộng v2 bằng bằng chứng đã ký về dòng dõi khóa, nên nhà phát triển có thể chuyển sang khóa mới mà không bỏ rơi người dùng hiện có. Quan trọng với các ứng dụng sống lâu và những lần di trú ký qua Play. Không liên quan với bản mod cá nhân, nhưng là kiến thức thiết yếu với nhà phát triển.
v4 (giao hàng tăng tiến)
Hỗ trợ cài dạng streaming, nơi việc xác minh diễn ra khi các byte đến thay vì sau khi tải xong. Gắn với các cơ chế giao hàng mới hơn và vô hình trong các quy trình mod thủ công. Hãy biết nó tồn tại; bạn sẽ hiếm khi gọi trực tiếp.
Nên dùng lược đồ nào
Phát hành cả v1 và v2 cho các bản build cài ngoài cửa hàng: v1 phủ các thiết bị cổ, v2 phủ phần còn lại và gánh trọng lượng bảo mật. Thêm v3 chỉ khi bạn dự định xoay khóa. apksigner bật tổ hợp đúng theo mặc định cho cài đặt SDK tối thiểu của bạn.
Cách tạo keystore
Lệnh keytool tạo keystore và danh tính ký mà các bản build sau này sẽ dùng; hãy bảo vệ cả tệp lẫn mật khẩu của nó, vì mất khóa có thể chặn các bản cập nhật cho những gói phụ thuộc vào nó qua các lần phát hành sau và khi cài trên thiết bị người dùng.
Lệnh keytool
keytool -genkeypair -v -keystore my.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000
Hãy trả lời các câu hỏi một cách trung thực, đặt mật khẩu cho store và cho key thật mạnh, rồi xác nhận tệp đã xuất hiện. Tài liệu ký ứng dụng của SDK đi qua từng cờ và lý do đằng sau mỗi lựa chọn.
Sao lưu keystore
Hãy sao chép tệp tới hai nơi độc lập trước khi ký bất cứ thứ gì bằng nó: ví dụ một ổ USB được mã hóa và một archive ngoại tuyến. Keystore chỉ có một bản sao là keystore bạn đã mất nửa, xét tới việc hầu như không ai động tới nó cho tới ngày tai nạn.
Cách ký bằng apksigner
apksigner ký APK, xác minh chứng chỉ của chúng và báo cáo các lược đồ chữ ký được hỗ trợ; nó đi kèm Android SDK build tools, nhờ đó trở thành lựa chọn dòng lệnh ưu tiên cho các gói Android hiện đại vốn cần những lược đồ vượt quá v1 để cài đặt trên các thiết bị Android ngày nay.
Ký gói ứng dụng
apksigner sign --ks my.keystore --out signed.apk unsigned.apk
Nhập mật khẩu keystore khi được nhắc. Cờ --out giữ nguyên đầu vào chưa ký của bạn, nhờ đó luôn có một cặp trước và sau sạch để gỡ lỗi các vấn đề chữ ký về sau.
Xác minh chữ ký
apksigner verify --print-certs signed.apk
Hãy xác nhận đầu ra nêu tên chứng chỉ của bạn và liệt kê các lược đồ mong đợi. Việc xác minh mất vài giây và bắt được những lỗi im lặng, như một bản build cài từ cache trong khi việc ký thực ra đã thất bại, thứ khiến bạn mất hàng giờ nếu bỏ qua.
Cách ký bằng jarsigner
jarsigner là một tiện ích JDK áp chữ ký JAR v1 cho APK, chủ yếu cho các quy trình cũ; nó không tạo các lược đồ chữ ký APK mới hơn, nên hãy dùng apksigner khi cần độ tương thích với thiết bị Android hiện đại cho việc cài đặt và cập nhật qua các phiên bản được hỗ trợ.
Căn trước, rồi ký
zipalign -p 4 unsigned.apk aligned.apk
jarsigner -keystore my.keystore aligned.apk mykey
Việc căn chỉnh phải đi trước ký v1 vì nó sắp xếp lại các byte mà chữ ký bao phủ. Rồi xác minh bằng jarsigner -verify -verbose -certs, và ưu tiên apksigner làm kết luận cuối cùng cho các lược đồ hiện đại.
Cách ký bằng MT Manager
MT Manager có thể ký ngay từ menu APK trên điện thoại: chọn tệp, chọn thao tác ký, và dùng khóa mặc định của nó hoặc một keystore đã cấu hình; hãy giữ khóa nhất quán nếu các bản build sau phải cập nhật gói này.
Khóa mặc định so với keystore của bạn
Khóa mặc định ổn cho các thí nghiệm vứt đi, nhưng những bản build dự định cập nhật cho nhau qua các phiên cần keystore ổn định của bạn. Hãy cấu hình nó một lần trong phần cài đặt của MT Manager, rồi mọi rebuild tự động mang cùng danh tính.
Cách ký bằng Android Studio
Wizard Generate Signed Bundle or APK của Android Studio có thể ký một bản release sau khi bạn chọn module và keystore; Gradle signingConfigs xử lý cùng những cài đặt đó cho các lần build lặp lại khi bạn muốn quy trình được tự động hóa từ cấu hình dự án và pipeline CI của mình.
Khi nào wizard phù hợp
Việc tạo keystore lần đầu và các lần phát hành đơn lẻ hưởng lợi từ dòng có hướng dẫn cùng cách kiểm mật khẩu của nó. Các bản build mod theo script hoặc lặp lại thuộc về apksigner trên dòng lệnh, nơi bước này được nhìn thấy và kiểm soát phiên bản.
Các lỗi ký thường gặp
Thiếu keystore, chữ ký cập nhật không tương thích, lệch khi xác minh và đầu ra chưa ký là những lỗi ký phổ biến; trước hết hãy nhận diện đúng thông báo, vì mỗi cái chỉ tới một khóa, một tệp đầu vào hoặc một bước quy trình cần điều tra trước khi build lại gói để cài.
Không tìm thấy keystore
Đường dẫn sai, tệp đã bị di chuyển, hoặc bạn gõ alias sai. Hãy kiểm tra lại đường dẫn bằng trình quản lý tệp, xác nhận alias bằng keytool -list, và giữ các keystore trong một thư mục cố định để việc này không tái diễn.
INSTALL_FAILED_UPDATE_INCOMPATIBLE
Thiết bị đang giữ cùng gói dưới một khóa khác. Hãy gỡ ứng dụng đang có, chấp nhận mất dữ liệu cục bộ, và cài bản build của bạn như một lần cài sạch. Không có cờ hay mẹo nào lách được: đó là hệ thống chữ ký hoạt động đúng như thiết kế.
Lệch chữ ký khi xác minh
apksigner verify thất bại hoặc hiển thị một chứng chỉ bất thường. Bạn đã ký bằng keystore sai, ký một tệp đã ký sẵn với các cài đặt xung đột, hoặc xác minh nhầm đầu vào chưa ký. Hãy ký lại đúng tệp bằng đúng khóa.
Gói chưa ký bị từ chối
Trình cài đặt từ chối tệp trước khi bất kỳ logic chữ ký nào chạy. Bước ký đã bị bỏ qua, thường vì một công cụ rebuild mà không bật lượt ký của nó. Hãy ký thủ công và xác minh trước khi quay lại trình cài đặt.
Sai keystore, đúng mật khẩu
Việc ký thành công nhưng xác minh hiển thị chứng chỉ của người lạ: bạn đã trỏ vào một keystore cũ hoặc mượn của ai. Những bản build ký bằng các khóa khác nhau không bao giờ cập nhật đè lên nhau, nên hãy dừng lại và ký lại bằng khóa sở hữu dòng dõi của ứng dụng đang cài trước khi đi tiếp.
Kỷ luật keystore cho người mod
Với các dự án kiểm tra riêng tư, hãy giữ một khóa được đặt tên rõ ràng cho mỗi dòng gói và tạo các bản sao lưu riêng cho mỗi keystore; tên tệp có ngày tháng cùng ghi chép APK nào dùng khóa nào sẽ khiến các cập nhật sau dễ quản lý hơn trên nhiều thiết bị và bản build.
Đặt tên khóa theo dự án
game-mod-2026.keystore nói với bạn của tương lai chính xác nó ký thứ gì. Tên chung chung khuyến khích việc dùng lại giữa các bản build không liên quan, và các bản build không liên quan dùng chung một khóa sẽ kế thừa ràng buộc cập nhật của nhau. Sự rõ ràng hôm nay ngăn các lần gỡ cài sau này.
Cách xác minh chữ ký APK
Việc xác minh kiểm tra đầu ra đã ký một cách độc lập trước khi cài, xác nhận chứng chỉ và các lược đồ bạn mong đợi; hãy dùng hướng dẫn kiểm tra chữ ký để đọc mã băm và so sánh chúng với một bản chính thức đáng tin cậy của cùng gói.
Hãy tạo một keystore, sao lưu nó hai lần, và ký mọi rebuild bằng cùng khóa. Khi bản build tiếp theo từ chối cài, hướng dẫn rebuild và phần gỡ lỗi cài đặt trong trụ cột mod sẽ tiếp quản từ đó.
Điểm chính
- Ký mọi bản rebuild bằng keystore của chính bạn; Android không cài thứ gì chưa ký.
- Phát hành cả chữ ký v1 và v2, thêm v3 khi việc xoay khóa quan trọng, và luôn xác minh sau khi ký.
- Mất keystore làm danh tính ứng dụng thành mồ côi vĩnh viễn, nên hãy sao lưu hai lần.
Các câu hỏi thường gặp
Làm sao ký một APK?
Chạy apksigner sign với keystore của bạn trên gói ứng dụng, hoặc dùng menu ký trong MT Manager hay bước rebuild trong APK Editor. Rồi xác minh chứng chỉ bằng apksigner verify trước khi cài. Gói chưa ký hoặc ký sai luôn thất bại khi cài.
apksigner là gì?
apksigner là công cụ ký dòng lệnh chính thức của Google, đi kèm Android SDK build tools. Nó áp các lược đồ ký v1 đến v4, xác minh chữ ký hiện có và xoay khóa theo v3. Hãy ưu tiên nó hơn jarsigner cho bất kỳ mục tiêu nào hướng tới các phiên bản Android hiện đại.
Keystore là gì?
Keystore là tệp mã hóa chứa khóa ký riêng và chứng chỉ của bạn, được bảo vệ bằng các mật khẩu bạn đặt khi tạo. Android tin khóa chứ không tin bạn, nên mất keystore sẽ vĩnh viễn làm mọi ứng dụng được ký bằng nó thành mồ côi. Hãy sao lưu nó ở hai nơi.
Chữ ký v1, v2, v3 và v4 là gì?
v1 ký từng mục ZIP theo cách JAR cũ; v2 ký toàn bộ APK để xác minh nhanh và mạnh hơn; v3 bổ sung xoay khóa để khôi phục khi mất khóa; v4 hỗ trợ giao hàng tăng tiến. Các bản build hiện đại mang cả v1 và v2, thêm v3 khi việc xoay khóa quan trọng.
Có cần zipalign trước khi ký không?
Có với gói chỉ v1: zipalign trước, rồi ký, vì việc căn chỉnh thay đổi các byte mà chữ ký v1 bao phủ. Với v2 trở lên, apksigner tự xử lý căn chỉnh và cảnh báo khi nó phải điều chỉnh. Khi chưa chắc, cứ căn trước; thứ tự ấy không bao giờ gây hại.
Tôi có thể ký APK mà không cần Android Studio không?
Được. apksigner chạy độc lập từ thư mục SDK build-tools, không cần IDE nào, và MT Manager ký ngay trên chính điện thoại. Android Studio chỉ gói cùng những thao tác đó trong một wizard. Ký bằng dòng lệnh là tiêu chuẩn trong các quy trình mod.
Làm sao sửa lỗi lệch chữ ký?
Gỡ ứng dụng đang mang chữ ký kia, rồi cài bản build của bạn như một lần cài sạch, chấp nhận dữ liệu cục bộ sẽ mất theo lệnh gỡ. Lệch chữ ký không thể sửa bằng các mẹo ký lại: hai khóa khác nhau không bao giờ cập nhật đè lên nhau theo thiết kế của Android.
Ký debug và ký release khác nhau thế nào?
Bản debug dùng khóa tự tạo trên mỗi máy dùng khi phát triển, hợp cho thử nghiệm và không bao giờ để phân phối. Bản release dùng khóa keystore riêng của bạn, thứ định nghĩa danh tính vĩnh viễn của ứng dụng qua nhiều năm. Đừng bao giờ phát hành thứ gì được ký bằng khóa debug.
Tôi có thể dùng một keystore cho nhiều ứng dụng không?
Được. Một nhà phát triển có thể dùng một keystore cho nhiều ứng dụng, dù việc mất hay để lộ nó sẽ ảnh hưởng tới mọi gói phụ thuộc vào khóa đó. Các khóa riêng biệt có thể hạn chế tác động đó. Dù chọn cách nào, hãy sao lưu mỗi keystore và ghi lại khóa nào đã ký gói nào.
Chuyện gì xảy ra nếu tôi mất keystore?
Bạn mất khả năng phát hành cập nhật cho mọi ứng dụng đã ký bằng nó, vĩnh viễn, không có con đường khôi phục nào từ Google cho các gói cài ngoài cửa hàng. Người dùng phải gỡ và cài lại dưới khóa mới, mất dữ liệu cục bộ. Đó là lý do sao lưu keystore xếp trên mọi biện pháp phòng ngừa khác.