Proč musí být soubory APK podepsány?
Každá aplikace pro Android musí být před instalací digitálně podepsána. Podpis slouží k několika účelům:
- Ověřuje identitu vývojáře aplikace
- Zajišťuje, že soubor APK nebyl zmanipulován
- Umožňuje systému Android porovnávat aktualizace aplikací s originálem
- Vyžaduje se pro instalaci na všechna zařízení Android
Je vyžadován nástroj pro stolní počítač
Podepisování APK vyžaduje nástroje příkazového řádku (JDK / Android SDK). To nelze provést ve webovém prohlížeči. Při podepisování souborů APK v počítači postupujte podle níže uvedeného průvodce.
Metoda 1: Podepište se pomocí apksigneru (doporučeno)
apksigner je oficiální nástroj pro podepisování souborů APK společnosti Google, který je součástí nástrojů Android SDK Build Tools.
Krok 1: Vygenerujte úložiště klíčů
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Krok 2: Podepište soubor APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Krok 3: Ověřte podpis
apksigner verify --verbose signed-app.apk
Metoda 2: Podepište se pomocí jarsigneru (starší)
# 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 podepsání optimalizujte soubor APK pomocí zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Podepisování ladění (pro testování)
Pro účely testování můžete použít výchozí úložiště klíčů pro ladění 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
Porovnání nástrojů pro podepisování
| Metrika | apksigner | jarsigner |
|---|---|---|
| Podpis V1 | ||
| Podpis V2 | ||
| Podpis V3 | ||
| Doporučeno | Dědictví |
Podepisovač APK — Často kladené otázky
Běžné dotazy týkající se podepisování souborů APK, úložišť klíčů a podepisování kódu Android
Proč na pořadí zarovnání (zipalign Before apksigner) záleží na Androidu 11–15
Jednou z nejčastějších chyb, kterých se vývojáři a moddeři dopouštějí při podepisování upraveného nebo sloučeného souboru APK, je spuštění zipalign po při podepisování balíčku – nebo použití staršího nástroje Java jarsigner místo sady Android SDK apksigner od Googlu. Protože schéma podpisu APK v2 a v3 vypočítává kryptografický hash přes celé binární rozložení archivu ZIP, úprava bajtových offsetů pomocí zipalign po podepsání okamžitě znehodnotí blok podpisu v2/v3.
Počínaje Androidem 11 (úroveň API 30) a přísně vynuceným na Androidu 14 a 15 vyžaduje PackageManager dvě nesmlouvavé podmínky pro jakýkoli soubor APK zacílený na moderní úrovně SDK:
- Nekomprimovaný 4bajtový zarovnaný resources.arsc: Zkompilovaná tabulka zdrojů (resources.arsc) musí být uložena nekomprimovaná (STORED) a zarovnána na 4bajtové hranici, aby ji Android mohl mapovat do paměti (mmap) přímo bez kopírování do paměti RAM. Vždy provádějte podepisování zipalign -p -f -v 4 input.apk aligned.apk před.
- Povinný blok podpisu v2+: Podepsání APK cíleného na API 30+ pomocí jarsigner (které zapisuje pouze podpis v1 META-INF/) způsobí, že Android 11–15 odmítne instalaci pomocí INSTALL_PARSE_FAILED_NO_CERTIFICATES. Pomocí výše uvedeného generátoru interaktivních příkazů vytvořte přesný příkaz apksigner --v2-signing-enabled=true pro své úložiště klíčů nebo ověřte podepsaný výstup v našem Ověřovač podpisu APK.