0Pricing
Android Academy · Lekcja

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 10000

Blok 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=superSecret

Play 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 upload

Ochrona 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 pliku keystore.properties.
  • Zbuduj podpisany plik .aab za 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ą keytool i połącz go z signingConfigs.
  • Nie przechowuj haseł w gicie — użyj keystore.properties i .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

  1. Przygotowanie kompilacji wydaniowej
  2. Podpisywanie aplikacji
  3. Play Console i strona aplikacji
  4. Udostępnianie etapowe i aktualizacje
← Powrót do Android Academy