De ce trebuie să fie semnate fișierele APK?
Fiecare aplicație Android trebuie să fie semnată digital înainte de a putea fi instalată. Semnătura are mai multe scopuri:
- Verifică identitatea dezvoltatorului aplicației
- Se asigură că APK-ul nu a fost modificat
- Permite Android să potrivească actualizările aplicației cu cele originale
- Necesar pentru instalare pe toate dispozitivele Android
Instrumentul desktop este necesar
Semnarea APK necesită instrumente de linie de comandă (JDK / Android SDK). Acest lucru nu se poate face într-un browser web. Urmați ghidul de mai jos pentru a semna APK-uri pe computer.
Metoda 1: semnați cu apksigner (recomandat)
apksigner este instrumentul oficial de semnare APK de la Google, inclus în Android SDK Build Tools.
Pasul 1: Generați un depozit de chei
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Pasul 2: semnați APK-ul
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Pasul 3: Verificați semnătura
apksigner verify --verbose signed-app.apk
Metoda 2: semnați cu jarsigner (moștenire)
# 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
Pasul 4: Zipalign (Important!)
După semnare, optimizați APK-ul cu zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Semnarea de depanare (pentru testare)
În scopuri de testare, puteți utiliza magazinul de chei implicit de depanare 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
Comparația instrumentelor de semnare
| Metrică | apksigner | jarsigner |
|---|---|---|
| Semnătura V1 | ||
| Semnătura V2 | ||
| Semnătura V3 | ||
| Recomandat | Moştenire |
APK Signer — Întrebări frecvente
Întrebări frecvente despre semnarea APK-urilor, depozitele de chei și semnarea codurilor Android
De ce este importantă comanda de aliniere (zipalign înainte de apksigner) pe Android 11–15
Una dintre cele mai frecvente greșeli pe care dezvoltatorii și modificatorii le fac atunci când semnează un APK modificat sau îmbinat este să ruleze zipalign după să semneze pachetul sau să folosească utilitarul moștenit jarsigner de la Java în loc de SDK Android apksigner de la Google. Deoarece APK Signature Scheme v2 și v3 calculează un hash criptografic pe întregul aspect binar al arhivei ZIP, modificarea decalajelor de octeți cu zipalign după semnare invalidează imediat blocul de semnătură v2/v3.
Începând cu Android 11 (nivel API 30) și aplicat strict pe Android 14 și 15, PackageManager necesită două condiții nenegociabile pentru orice APK care vizează nivelurile SDK moderne:
- resources.arsc aliniat pe 4 octeți necomprimat: Tabelul de resurse compilat (resources.arsc) trebuie să fie stocat necomprimat (STORED) și aliniat pe o limită de 4 octeți, astfel încât Android să îl poată mapa în memorie (mmap) direct fără a-l copia în RAM. Executați întotdeauna semnarea zipalign -p -f -v 4 input.apk aligned.apk înainte.
- Bloc de semnătură obligatoriu v2+: Semnarea unui APK care vizează API 30+ cu jarsigner (care scrie doar o semnătură META-INF/ v1) va determina Android 11–15 să respingă instalarea cu INSTALL_PARSE_FAILED_NO_CERTIFICATES. Utilizați generatorul de comenzi interactiv de mai sus pentru a crea comanda exactă apksigner --v2-signing-enabled=true pentru depozitul de chei sau verificați rezultatul semnat în Verificator de semnătură APK.