Podpisywanie aplikacji
Klucze i Play App Signing
Podpisywanie aplikacji to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.
Dlaczego aplikacje muszą być podpisane
Android nie zainstaluje aplikacji, jeśli nie jest ona podpisana cyfrowo. Podpis potwierdza dwie rzeczy: kto opublikował aplikację oraz że od tego czasu plik APK nie został zmodyfikowany.
Co najważniejsze, podpisy wiążą aktualizacje z oryginalną aplikacją. Aktualizacja zostanie zaakceptowana tylko wtedy, gdy zostanie podpisana tym samym kluczem co zainstalowana wersja. Jeśli utracisz ten klucz, nie będziesz już w stanie nigdy zaktualizować aplikacji.
W tej lekcji omówiono magazyny kluczy, konfigurację podpisywania oraz bezpieczniejsze, nowoczesne rozwiązanie firmy Google: Play App Signing.
Magazyny kluczy i klucze
Tożsamość używana do podpisywania jest przechowywana w pliku magazynu kluczy (.jks lub .keystore). Magazyn kluczy może zawierać wiele kluczy; każdy z nich ma alias i własne hasło.
- Hasło magazynu kluczy — odblokowuje plik.
- Alias klucza — identyfikuje klucz wewnątrz magazynu.
- Hasło klucza — odblokowuje konkretny klucz.
Uruchamiane codziennie kompilacje debugowania są automatycznie podpisywane tymczasowym magazynem kluczy debugowania. W przypadku wydania potrzebny jest własny magazyn.
Tworzenie magazynu kluczy
Magazyn kluczy można utworzyć w oknie dialogowym Android Studio albo za pomocą polecenia keytool dostarczanego z JDK.
Należy ustawić długi okres ważności (co najmniej 25 lat) — jeśli klucz wygaśnie, nie będzie można publikować aktualizacji. RSA 2048 to standardowy wybór.
keytool -genkeypair \
-v \
-keystore release.jks \
-alias upload \
-keyalg RSA \
-keysize 2048 \
-validity 10000Blok signingConfigs
Aby podpisywać automatycznie podczas kompilacji Gradle, należy zadeklarować wpis signingConfigs i przypisać go do typu kompilacji release.
To działa, ale proszę zauważyć, że hasła znajdują się bezpośrednio w pliku kompilacji — naprawimy to w następnym kroku.
android {
signingConfigs {
create("release") {
storeFile = file("release.jks")
storePassword = "superSecret"
keyAlias = "upload"
keyPassword = "superSecret"
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
}
}
}Nie umieszczaj sekretów w Git
Nigdy nie zatwierdzaj haseł ani magazynu kluczy w systemie kontroli wersji. Zamiast tego odczytuj je z lokalnego pliku keystore.properties, ignorowanego przez git.
Dodaj pliki keystore.properties i *.jks do .gitignore.
// top of app/build.gradle.kts
val keystoreProps = Properties().apply {
val f = rootProject.file("keystore.properties")
if (f.exists()) load(f.inputStream())
}
android {
signingConfigs {
create("release") {
storeFile = file(keystoreProps["storeFile"] as String)
storePassword = keystoreProps["storePassword"] as String
keyAlias = keystoreProps["keyAlias"] as String
keyPassword = keystoreProps["keyPassword"] as String
}
}
}Plik keystore.properties
Odpowiadający mu plik właściwości to zwykła lista w formacie key=value, przechowywana poza gitem i zabezpieczona w bezpiecznym miejscu (w menedżerze haseł lub magazynie sekretów CI).
Na serwerze CI należy wstrzykiwać te wartości jako sekrety oparte na zmiennych środowiskowych, a nie używać pliku zatwierdzonego w repozytorium.
# keystore.properties (git-ignored!)
storeFile=release.jks
storePassword=superSecret
keyAlias=upload
keyPassword=superSecretPlay App Signing
Nowoczesny Google Play korzysta z funkcji Play App Signing. Google przechowuje tutaj właściwy klucz podpisywania aplikacji w swojej bezpiecznej infrastrukturze i używa go do podpisywania plików APK dostarczanych użytkownikom.
Zarządzasz tylko kluczem przesyłania: podpisujesz nim pakiet i przesyłasz go. Google Play weryfikuje klucz przesyłania, usuwa jego podpis i ponownie podpisuje pakiet kluczem podpisywania aplikacji.
Największa korzyść jest taka, że jeśli kiedykolwiek utracisz klucz przesyłania, możesz poprosić o jego zresetowanie — klucz podpisywania aplikacji, któremu ufają użytkownicy, pozostaje bezpieczny u Google.
Klucz przesyłania a klucz podpisywania aplikacji
Dwa klucze, dwa zadania — nie należy ich mylić:
- Klucz przesyłania — należy do Ciebie. Podpisuje przesyłany pakiet AAB. Można go zresetować w razie utraty.
- Klucz podpisywania aplikacji — należy do Google (lub został przez Ciebie jednorazowo przesłany). Podpisuje ostateczne pliki APK instalowane przez użytkowników. Jest stały.
Podczas rejestrowania nowej aplikacji najprostszym rozwiązaniem jest pozwolenie Google na wygenerowanie klucza podpisywania aplikacji i podpisywanie przesyłanych pakietów własnym kluczem przesyłania.
Weryfikowanie podpisu
Aby sprawdzić, jak podpisano artefakt, użyj narzędzia apksigner z pakietu Android SDK build-tools. Narzędzie podaje certyfikat podpisywania oraz informacje o obecnych schematach podpisu (v1/v2/v3).
Porównanie odcisku SHA-256 certyfikatu służy również do rejestrowania aplikacji w usługach takich jak Firebase lub Google Sign-In.
# Verify and print signer certificates of an APK
apksigner verify --print-certs app-release.apk
# Show the SHA-256 fingerprint of a keystore key
keytool -list -v -keystore release.jks -alias uploadOchrona kluczy
Klucz przesyłania trudno zastąpić, a klucz podpisywania aplikacji (jeśli zarządzasz nim samodzielnie) jest niemożliwy do zastąpienia. Należy traktować je jak największe skarby:
- Utwórz kopię zapasową magazynu kluczy w co najmniej dwóch bezpiecznych miejscach.
- Przechowuj hasła w menedżerze haseł, nigdy w kodzie źródłowym.
- Korzystaj z Play App Signing, aby utrata klucza przesyłania była możliwa do naprawienia.
- Ogranicz liczbę członków zespołu mających dostęp do magazynu kluczy.
Wiele opublikowanych aplikacji porzucono tylko dlatego, że deweloper utracił klucz i nie mógł już dostarczać aktualizacji.
Połączenie wszystkich elementów
Pełny proces podpisywania wydania wygląda następująco:
- Utwórz magazyn kluczy przesyłania za pomocą
keytool. - Połącz go z
signingConfigs, odczytując sekrety z plikukeystore.properties. - Zbuduj podpisany plik
.aabza pomocą./gradlew bundleRelease. - Prześlij go do Google Play, które przed dostarczeniem aplikacji użytkownikom ponownie podpisze ją kluczem podpisywania aplikacji.
Od tej pory każda aktualizacja musi być podpisana tym samym kluczem przesyłania.
Szybki test
Jeśli funkcja Play App Signing jest włączona, którego klucza używasz do podpisania przesyłanego pakietu i co się stanie, jeśli go utracisz?
Podsumowanie: podpisywanie aplikacji
Podpis sprawia, że aplikację na Androida można zainstalować i aktualizować:
- Magazyn kluczy przechowuje klucze; każdy klucz ma alias i hasła.
- Utwórz klucz o długim okresie ważności za pomocą
keytooli połącz go zsigningConfigs. - Nie przechowuj haseł w gicie — użyj
keystore.propertiesi.gitignore. - Play App Signing rozdziela klucze na resetowalny klucz przesyłania oraz stały klucz podpisywania aplikacji firmy Google.
- Starannie twórz kopie zapasowe kluczy — utrata klucza może zakończyć istnienie aplikacji.
W następnym kroku skonfigurujesz Play Console i stronę aplikacji w sklepie.
Często zadawane pytania
Czy lekcja „Podpisywanie aplikacji” jest bezpłatna?
Tak — pełny tekst „Podpisywanie aplikacji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Podpisywanie aplikacji”?
Klucze i Play App Signing Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Android Academy?
Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Podpisywanie aplikacji”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?
Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Przygotowanie kompilacji wydaniowej
- Podpisywanie aplikacji
- Play Console i strona aplikacji
- Udostępnianie etapowe i aktualizacje