Prečo je potrebné podpísať súbory APK?
Každá aplikácia pre Android musí byť pred inštaláciou digitálne podpísaná. Podpis slúži na niekoľko účelov:
- Overuje identitu vývojára aplikácie
- Zabezpečuje, že súbor APK nebol sfalšovaný
- Umožňuje systému Android porovnávať aktualizácie aplikácie s originálom
- Vyžaduje sa na inštaláciu na všetkých zariadeniach so systémom Android
Vyžaduje sa nástroj na pracovnej ploche
Podpisovanie APK vyžaduje nástroje príkazového riadka (JDK / Android SDK). Toto nie je možné vykonať vo webovom prehliadači. Na podpísanie súborov APK na počítači postupujte podľa pokynov nižšie.
Metóda 1: Podpíšte sa pomocou apksigneru (odporúča sa)
apksigner je oficiálny nástroj na podpisovanie súborov APK od spoločnosti Google, ktorý je súčasťou nástrojov na zostavovanie súpravy Android SDK.
Krok 1: Vytvorte úložisko kľúčov
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Krok 2: Podpíšte súbor APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Krok 3: Overte podpis
apksigner verify --verbose signed-app.apk
Metóda 2: Podpíšte sa pomocou jarsigneru (staršie)
# 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
Krok 4: Zipalign (Dôležité!)
Po podpísaní optimalizujte súbor APK pomocou zipalignu:
zipalign -v 4 signed-app.apk aligned-app.apk
Podpisovanie ladenia (na testovanie)
Na testovacie účely môžete použiť predvolené úložisko kľúčov na ladenie systému 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
Porovnanie podpisových nástrojov
| Metrika | apksigner | jarsigner |
|---|---|---|
| Podpis V1 | ||
| Podpis V2 | ||
| Podpis V3 | ||
| Odporúčané | Legacy |
Podpisovač APK — často kladené otázky
Bežné otázky týkajúce sa podpisovania súborov APK, úložísk kľúčov a podpisovania kódu systému Android
Prečo na poradí zarovnania (zipalign Before apksigner) záleží v systéme Android 11–15
Jednou z najčastejších chýb, ktoré vývojári a modifikátori robia pri podpisovaní upraveného alebo zlúčeného súboru APK, je spustenie zipalign po pri podpisovaní balíka – alebo použitie staršej pomôcky Java jarsigner namiesto súpravy Android SDK apksigner od Google. Pretože APK Signature Scheme v2 a v3 počítajú kryptografický hash pre celé binárne usporiadanie archívu ZIP, úprava bajtových posunov pomocou zipalign po podpísaní okamžite zruší platnosť bloku podpisov v2/v3.
Počnúc Androidom 11 (úroveň API 30) a prísne presadzovaným na Androide 14 a 15, PackageManager vyžaduje pre každý súbor APK zacielený na moderné úrovne SDK dve podmienky, o ktorých nemožno vyjednávať:
- Nekomprimovaný 4-bajtový zarovnaný resources.arsc: Zostavená tabuľka zdrojov (resources.arsc) musí byť uložená nekomprimovaná (STORED) a zarovnaná na 4-bajtovej hranici, aby ju Android mohol mapovať do pamäte (mmap) priamo bez kopírovania do pamäte RAM. Vždy vykonajte podpisovanie zipalign -p -f -v 4 input.apk aligned.apk predtým.
- Povinné blokovanie podpisu v2+: Podpísanie súboru APK zacieleného na API 30+ pomocou jarsigner (ktoré zapíše iba podpis v1 META-INF/) spôsobí, že Android 11–15 odmietne inštaláciu pomocou INSTALL_PARSE_FAILED_NO_CERTIFICATES. Pomocou vyššie uvedeného generátora interaktívnych príkazov vytvorte presný príkaz apksigner --v2-signing-enabled=true pre svoje úložisko kľúčov alebo overte svoj podpísaný výstup v našom Overovač podpisu súboru APK.