Waarom moeten APK-bestanden worden ondertekend?
Elke Android-app moet digitaal worden ondertekend voordat deze kan worden geïnstalleerd. De handtekening dient verschillende doelen:
- Verifieert de identiteit van de app-ontwikkelaar
- Zorgt ervoor dat er niet met de APK is geknoeid
- Hiermee kan Android app-updates matchen met het origineel
- Vereist voor installatie op alle Android-apparaten
Desktoptool vereist
Voor APK-ondertekening zijn opdrachtregelprogramma's (JDK/Android SDK) vereist. Dit kan niet in een webbrowser. Volg de onderstaande gids om APK's op uw computer te ondertekenen.
Methode 1: Ondertekenen met apksigner (aanbevolen)
apksigner is de officiële APK-ondertekeningstool van Google, opgenomen in Android SDK Build Tools.
Stap 1: Genereer een sleutelarchief
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Stap 2: Onderteken de APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Stap 3: Controleer de handtekening
apksigner verify --verbose signed-app.apk
Methode 2: Ondertekenen met 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
Stap 4: Zipalign (belangrijk!)
Optimaliseer na ondertekening de APK met zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Foutopsporing ondertekening (voor testen)
Voor testdoeleinden kunt u de standaard Android-foutopsporingssleutelarchief gebruiken:
# 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
Vergelijking van ondertekeningstools
| Metriek | APK-ondertekenaar | jarsigner |
|---|---|---|
| V1-handtekening | ||
| V2-handtekening | ||
| V3-handtekening | ||
| Aanbevolen | Nalatenschap |
APK-ondertekenaar - Veelgestelde vragen
Veelgestelde vragen over APK-ondertekening, sleutelarchieven en ondertekening van Android-code
Waarom uitlijningsvolgorde (zipalign vóór apksigner) belangrijk is op Android 11–15
Een van de meest voorkomende fouten die ontwikkelaars en modders maken bij het ondertekenen van een gewijzigde of samengevoegde APK, is het uitvoeren van zipalign na en het ondertekenen van het pakket, of het gebruik van Java's verouderde jarsigner-hulpprogramma in plaats van Google's Android SDK apksigner. Omdat APK Signature Scheme v2 en v3 een cryptografische hash berekenen over de gehele binaire lay-out van het ZIP-archief, maakt het wijzigen van byte-offsets met zipalign na ondertekening onmiddellijk het v2/v3-handtekeningenblok ongeldig.
Vanaf Android 11 (API-niveau 30) en strikt gehandhaafd op Android 14 en 15, vereist PackageManager twee niet-onderhandelbare voorwaarden voor elke APK die zich richt op moderne SDK-niveaus:
- Ongecomprimeerde 4-byte uitgelijnde resources.arsc: De gecompileerde bronnentabel (resources.arsc) moet ongecomprimeerd worden opgeslagen (STORED) en uitgelijnd op een grens van 4 bytes, zodat Android deze rechtstreeks in het geheugen kan toewijzen (mmap) zonder deze naar het RAM te kopiëren. Voer altijd de zipalign -p -f -v 4 input.apk aligned.apk voor-ondertekening uit.
- Verplicht v2+ handtekeningblok: Het ondertekenen van een APK-targeting-API 30+ met jarsigner (die alleen een v1 META-INF/-handtekening schrijft) zorgt ervoor dat Android 11–15 de installatie met INSTALL_PARSE_FAILED_NO_CERTIFICATES afwijst. Gebruik de bovenstaande interactieve opdrachtgenerator om de exacte apksigner --v2-signing-enabled=true-opdracht voor uw sleutelarchief te bouwen, of verifieer uw ondertekende uitvoer in onze APK-handtekeningverificatie.