Γιατί τα αρχεία APK πρέπει να υπογράφονται;
Κάθε εφαρμογή Android πρέπει να είναι ψηφιακά υπογεγραμμένη για να μπορέσει να εγκατασταθεί. Η υπογραφή εξυπηρετεί πολλούς σκοπούς:
- Επαληθεύει την ταυτότητα του προγραμματιστή της εφαρμογής
- Διασφαλίζει ότι το APK δεν έχει παραβιαστεί
- Επιτρέπει στο Android να αντιστοιχίζει ενημερώσεις εφαρμογών με το πρωτότυπο
- Απαιτείται για εγκατάσταση σε όλες τις συσκευές Android
Απαιτείται εργαλείο επιφάνειας εργασίας
Η υπογραφή APK απαιτεί εργαλεία γραμμής εντολών (JDK / Android SDK). Αυτό δεν μπορεί να γίνει σε πρόγραμμα περιήγησης ιστού. Ακολουθήστε τον παρακάτω οδηγό για να υπογράψετε APK στον υπολογιστή σας.
Μέθοδος 1: Υπογραφή με apksigner (Συνιστάται)
Το apksigner είναι το επίσημο εργαλείο υπογραφής APK της Google, το οποίο περιλαμβάνεται στα Εργαλεία δημιουργίας Android SDK.
Βήμα 1: Δημιουργήστε ένα Keystore
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Βήμα 2: Υπογράψτε το APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Βήμα 3: Επαληθεύστε την υπογραφή
apksigner verify --verbose signed-app.apk
Μέθοδος 2: Υπογραφή με 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
Βήμα 4: Zipalign (Σημαντικό!)
Μετά την υπογραφή, βελτιστοποιήστε το APK με το zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Υπογραφή εντοπισμού σφαλμάτων (για δοκιμή)
Για σκοπούς δοκιμής, μπορείτε να χρησιμοποιήσετε το προεπιλεγμένο χώρο αποθήκευσης κλειδιών εντοπισμού σφαλμάτων 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
Σύγκριση εργαλείων υπογραφής
| Μετρική | apksigner | jarsigner |
|---|---|---|
| V1 Υπογραφή | ||
| V2 Υπογραφή | ||
| V3 Υπογραφή | ||
| Συνιστάται | Κληροδότημα |
Υπογραφή APK — Συχνές ερωτήσεις
Συνήθεις ερωτήσεις σχετικά με την υπογραφή APK, τις αποθήκες κλειδιών και την υπογραφή κώδικα Android
Γιατί έχει σημασία η σειρά ευθυγράμμισης (zipalign Πριν από το apksigner) στο Android 11–15
Ένα από τα πιο συχνά λάθη που κάνουν οι προγραμματιστές και οι τροποποιητές όταν υπογράφουν ένα τροποποιημένο ή συγχωνευμένο APK είναι η εκτέλεση zipalign μετά υπογράφοντας το πακέτο—ή χρησιμοποιώντας το βοηθητικό πρόγραμμα παλαιού τύπου jarsigner της Java αντί για το Android SDK apksigner της Google. Επειδή τα APK Signature Scheme v2 και v3 υπολογίζουν ένα κρυπτογραφικό κατακερματισμό σε ολόκληρη τη δυαδική διάταξη του αρχείου ZIP, η τροποποίηση των μετατοπίσεων byte με το zipalign μετά την υπογραφή ακυρώνει αμέσως το μπλοκ υπογραφής v2/v3.
Ξεκινώντας με το Android 11 (επίπεδο API 30) και επιβάλλεται αυστηρά σε Android 14 και 15, το PackageManager απαιτεί δύο αδιαπραγμάτευτες προϋποθέσεις για οποιοδήποτε APK που στοχεύει σύγχρονα επίπεδα SDK:
- Ασυμπίεστο 4-Byte Aligned resources.arsc: Ο μεταγλωττισμένος πίνακας πόρων (resources.arsc) πρέπει να αποθηκευτεί ασυμπίεστος (STORED) και να ευθυγραμμιστεί σε ένα όριο 4 byte, ώστε το Android να μπορεί να τον αντιστοιχίσει απευθείας στη μνήμη (mmap) χωρίς να τον αντιγράψει στη μνήμη RAM. Να εκτελείτε πάντα την υπογραφή zipalign -p -f -v 4 input.apk aligned.apk προτού.
- Υποχρεωτικό μπλοκ υπογραφής v2+: Η υπογραφή ενός APK στόχευσης API 30+ με το jarsigner (το οποίο γράφει μόνο μια υπογραφή META-INF/ v1) θα προκαλέσει το Android 11–15 να απορρίψει την εγκατάσταση με το INSTALL_PARSE_FAILED_NO_CERTIFICATES. Χρησιμοποιήστε τη διαδραστική γεννήτρια εντολών παραπάνω για να δημιουργήσετε την ακριβή εντολή apksigner --v2-signing-enabled=true για το χώρο αποθήκευσης κλειδιών σας ή επαληθεύστε την υπογεγραμμένη έξοδο στο Επαληθευτής υπογραφής APK μας.