Dlaczego pliki APK muszą być podpisane?
Każda aplikacja na Androida musi zostać podpisana cyfrowo, zanim będzie można ją zainstalować. Podpis służy kilku celom:
- Weryfikuje tożsamość twórcy aplikacji
- Zapewnia, że plik APK nie został naruszony
- Umożliwia Androidowi dopasowywanie aktualizacji aplikacji do oryginału
- Wymagane do instalacji na wszystkich urządzeniach z Androidem
Wymagane narzędzie komputerowe
Podpisywanie plików APK wymaga narzędzi wiersza poleceń (JDK / Android SDK). Nie można tego zrobić w przeglądarce internetowej. Postępuj zgodnie z poniższym przewodnikiem, aby podpisać pliki APK na swoim komputerze.
Metoda 1: Podpisz za pomocą apksigner (zalecane)
apksigner to oficjalne narzędzie Google do podpisywania plików APK, zawarte w narzędziach do tworzenia zestawu SDK systemu Android.
Krok 1: Wygeneruj magazyn kluczy
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Krok 2: Podpisz plik APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Krok 3: Zweryfikuj podpis
apksigner verify --verbose signed-app.apk
Metoda 2: Podpisz za pomocą jarsignera (starsza wersja)
# 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 (ważne!)
Po podpisaniu zoptymalizuj plik APK za pomocą zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Podpisywanie debugowania (do testowania)
Do celów testowych możesz użyć domyślnego magazynu kluczy debugowania Androida:
# 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
Porównanie narzędzi do podpisywania
| Parametr | apksigner | jarsigner |
|---|---|---|
| Podpis V1 | ||
| Podpis V2 | ||
| Podpis V3 | ||
| Zalecony | Dziedzictwo |
Osoba podpisująca APK — często zadawane pytania
Często zadawane pytania dotyczące podpisywania plików APK, magazynów kluczy i podpisywania kodu Androida
Dlaczego kolejność wyrównania (zipalign przed apksigner) ma znaczenie w systemie Android 11–15
Jednym z najczęstszych błędów popełnianych przez programistów i modderów podczas podpisywania zmodyfikowanego lub scalonego pakietu APK jest uruchomienie zipalign Po do podpisania pakietu — lub użycie starszego narzędzia Java jarsigner zamiast pakietu SDK Android SDK apksigner firmy Google. Ponieważ schemat podpisu APK v2 i v3 oblicza skrót kryptograficzny w całym układzie binarnym archiwum ZIP, modyfikowanie przesunięć bajtów za pomocą zipalign po podpisaniu natychmiast unieważnia blok podpisu v2/v3.
Począwszy od Androida 11 (poziom API 30) i ściśle egzekwowany w Androidzie 14 i 15, PackageManager wymaga dwóch niepodlegających negocjacjom warunków dla każdego pakietu APK przeznaczonego dla nowoczesnych poziomów SDK:
- Nieskompresowany, wyrównany 4-bajtowy resources.arsc: Skompilowana tabela zasobów (resources.arsc) musi być przechowywana w postaci nieskompresowanej (STORED) i wyrównana do 4-bajtowej granicy, aby system Android mógł zmapować ją w pamięci (mmap) bezpośrednio, bez kopiowania do pamięci RAM. Zawsze wykonuj podpisywanie zipalign -p -f -v 4 input.apk aligned.apk zanim.
- Obowiązkowy blok podpisu v2+: Podpisanie pliku APK przeznaczonego dla API 30+ za pomocą jarsigner (który zapisuje tylko podpis v1 META-INF/) spowoduje, że Android 11–15 odrzuci instalację za pomocą INSTALL_PARSE_FAILED_NO_CERTIFICATES. Skorzystaj z powyższego interaktywnego generatora poleceń, aby zbudować dokładną komendę apksigner --v2-signing-enabled=true dla swojego magazynu kluczy lub zweryfikuj podpisane dane wyjściowe w naszym Weryfikator podpisu APK.