Vibeloy
Registrieren
Alle Beiträge

Blog

Android-Keystore erstellen (Schritt-für-Schritt-Anleitung)

Veröffentlicht: Aktualisiert: 7 Min. Lesezeit

Was ist ein Android-Keystore, und warum braucht man ihn?

Ein Keystore ist eine verschlüsselte Datei, die das private/öffentliche Schlüsselpaar zum Signieren einer App enthält. Google Play verlangt, dass jede hochgeladene AAB-Datei eine gültige Signatur trägt; ein unsigniertes oder falsch signiertes Paket wird von Play Console bereits beim Hochladen abgelehnt.

Flutter und Android Studio erzeugen automatisch einen „Debug-Keystore" für die lokale Entwicklung; er hat ein festes Passwort, ist nur zum Testen auf dem eigenen Gerät gedacht, und kein Store akzeptiert ihn. Das Paket, das Sie in einen Store hochladen, muss mit einem selbst erzeugten „Release"- oder „Upload"-Keystore signiert sein.

Jedes weitere Update derselben App muss mit demselben Schlüssel (oder einer von Google anerkannten Signaturkette) signiert werden; andernfalls lehnt Play Console das Update mit der Begründung „mit einem anderen Zertifikat signiert" ab, was Nutzer zur Deinstallation und Neuinstallation zwingt. Damit ist Ihre Keystore-Datei ein dauerhafter Bestandteil der Identität Ihrer App.

Den Keystore mit keytool erzeugen

keytool ist ein Kommandozeilen-Tool, das mit dem Java Development Kit (JDK) ausgeliefert wird; da Ihre Flutter- oder Android-Studio-Installation bereits ein JDK enthält, ist meist keine separate Installation nötig. Der in der offiziellen Flutter-Dokumentation empfohlene Standardbefehl lautet: keytool -genkey -v -keystore upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload. Die Option -storetype JKS ist hier wichtig: Seit Java 9 ist PKCS12 der Standard-Speichertyp von keytool, ohne dieses Flag hätte die entstehende Datei zwar die Endung .jks, würde aber tatsächlich PKCS12-Daten enthalten.

-keyalg RSA -keysize 2048 legt Algorithmus und Länge des Schlüssels fest, -validity 10000 hält den Schlüssel rund 27 Jahre gültig, und -alias upload ist der Kurzname, den Sie dem Schlüssel geben und den Sie in key.properties wiederverwenden. Beim Ausführen des Befehls werden Sie der Reihe nach nach einem Store-Passwort, einem Key-Passwort und Ihren Namens-/Organisationsangaben gefragt.

Unter macOS und Linux läuft keytool direkt im Terminal, sofern das JDK im PATH liegt. Führen Sie unter Windows zunächst flutter doctor -v aus, um genau zu sehen, welches JDK verwendet wird, und suchen Sie in der Ausgabe nach der Zeile „Java binary at:"; keytool befindet sich im bin-Ordner dieses Verzeichnisses (ist JAVA_HOME nicht gesetzt oder sind mehrere JDKs installiert, kann die Annahme „%JAVA_HOME%\bin\keytool" auf das falsche JDK verweisen). Passen Sie den Dateipfad im -keystore-Parameter an Ihr eigenes Benutzerverzeichnis an, und merken Sie sich das Verzeichnis, aus dem Sie den Befehl ausgeführt haben — diesen Pfad brauchen Sie im nächsten Schritt erneut.

Einbindung in key.properties und Gradle

Erstellen Sie im Verzeichnis android/ eine Datei namens key.properties und fügen Sie die Zeilen storePassword, keyPassword, keyAlias und storeFile (der vollständige Pfad zu Ihrer Keystore-Datei) hinzu. Diese Datei ist Klartext und enthält Ihre Passwörter offen sichtbar, darf also niemals in die Versionskontrolle gelangen — fügen Sie als allerersten Schritt eine key.properties-Zeile zu Ihrer .gitignore hinzu.

In android/app/build.gradle.kts (dem aktuellen Kotlin-DSL) lesen Sie diese Datei ein und definieren einen signingConfigs.release-Block, wobei keyAlias, keyPassword, storeFile und storePassword aus key.properties stammen. Anschließend weisen Sie dem release-Build-Type signingConfig = signingConfigs.getByName("release") zu, sodass jedes erzeugte Release-Paket mit diesem Schlüssel signiert wird.

Ist R8/ProGuard-Shrinking (isMinifyEnabled=true) aktiviert, testen Sie das signierte Release-Paket vor dem Hochladen auf einem echten Gerät; manche Pakete, die auf Reflection setzen, werden vom Shrinking beeinträchtigt und stürzen nur im Release-Build ab. Das hat nichts mit der Signierung selbst zu tun, wird aber an diesem Schritt häufig vergessen.

Play App Signing: Upload Key vs. App Signing Key

Seit 2021 verlangt Google Play App Signing für neue Apps, eine Opt-out-Option gibt es nicht mehr. Dieses Modell kennt zwei verschiedene Schlüssel: den „Upload Key", den Sie mit keytool erzeugen und mit dem Sie jede AAB signieren, sowie den „App Signing Key", den Google in seiner eigenen sicheren Infrastruktur aufbewahrt und mit dem das an Nutzer verteilte Paket die endgültige Signatur erhält. Den App Signing Key selbst bekommen Sie nie zu Gesicht und besitzen ihn auch nie.

Verlieren Sie Ihren Upload Key (die Datei oder ihre Passwörter), sind aber bei Play App Signing registriert, gibt es einen Ausweg: Gehen Sie in der Play Console zu Protected with Play > Play Store protection > Manage Play app signing und stellen Sie im Abschnitt „Upload Key Certificate" einen Antrag über „Request upload key reset". Der Ablauf: Erzeugen Sie mit keytool einen neuen Upload-Keystore, exportieren Sie dessen Zertifikat mit keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem im PEM-Format und laden Sie diese PEM-Datei zusammen mit einer Begründung für die Zurücksetzung in der Play Console hoch. Sobald Google den Antrag geprüft und genehmigt hat, wird der neue Upload Key aktiv; da der eigentliche Signing Key nie aus Googles Händen war, bleiben Store-Identität, Bewertungen und Installationszahlen Ihrer App unberührt.

Haben Sie sich nie für Play App Signing registriert — typischerweise bei älteren Apps der Fall, die vor der Pflicht veröffentlicht wurden — und verlieren Ihren einzigen Signing Key, gibt es kein Zurück: Sie können für diese App nie wieder ein Update hochladen. Die einzige Option ist, unter einer neuen applicationId einen völlig neuen Eintrag zu eröffnen, was den Verlust bestehender Bewertungen, Installationszahlen und Suchranking bedeutet.

Sichere Aufbewahrung

Die Keystore-Datei nur auf einer einzigen lokalen Festplatte zu halten ist riskant: ein Festplattendefekt, eine Neuformatierung oder ein Rechnerwechsel können die Datei dauerhaft vernichten. Halten Sie mindestens ein verschlüsseltes Backup (externe Festplatte, verschlüsselter Cloud-Speicher) vor und fügen Sie die Datei niemals Ihrem Projekt-Repository hinzu — wie key.properties gehört auch die Keystore-Datei in die .gitignore.

Bewahren Sie Store-Passwort und Key-Passwort in einem Passwort-Manager auf und notieren Sie auch den Alias-Namen; ohne alle drei ist die Datei selbst nutzlos. Teilen Sie die Passwörter niemals im Klartext per E-Mail oder Chat; arbeiten Sie im Team, beschränken Sie den Zugriff auf die Personen, die ihn wirklich brauchen.

Der Vibeloy Keystore-Tresor speichert Ihre Keystore-Datei und Passwörter Ende-zu-Ende-verschlüsselt; statt die Datei als einzige lokale Kopie zu halten, können Sie sie sicher in einem kontogebundenen Tresor aufbewahren, der von jedem Gerät aus erreichbar ist. Dies ist eine Premium-Funktion von Vibeloy.

Häufige Fragen

Ich habe meine Keystore-Datei verloren — was soll ich tun?
Sind Sie bei Play App Signing registriert, können Sie im Abschnitt „Upload Key Certificate" unter Protected with Play > Play Store protection > Manage Play app signing in der Play Console einen Upload-Key-Reset beantragen: Erzeugen Sie einen neuen Upload-Keystore, exportieren Sie dessen Zertifikat mit keytool -export -rfc im PEM-Format und laden Sie es mit einer Begründung hoch; der neue Key wird aktiv, sobald Google den Antrag genehmigt hat. Waren Sie nicht registriert, ist der Verlust endgültig — Sie können diese App nie wieder aktualisieren.
Was ist key.properties, und warum wird es benötigt?
Es ist eine Klartext-Konfigurationsdatei in android/, die Pfad und Passwörter Ihrer Keystore-Datei enthält. Gradle liest diese Informationen daraus beim Signieren des Release-Builds; die Datei darf nie in git committet werden.
Ich habe mein Keystore-Passwort vergessen, besitze aber noch die Datei — kann ich es wiederherstellen?
Nein — das Passwort ist der kryptografische Bestandteil, der die Datei nutzbar macht, und es lässt sich nicht wiederherstellen. Für Ihre App hat das praktisch dieselbe Konsequenz wie ein kompletter Dateiverlust: ein Upload-Key-Reset, wenn Sie bei Play App Signing registriert sind, oder ein Neustart mit neuer applicationId, wenn nicht.
Was ist der Unterschied zwischen einem Debug-Keystore und einem Release-(Upload-)Keystore?
Der Debug-Keystore wird automatisch von Flutter/Android Studio erzeugt, verwendet ein festes, öffentlich bekanntes Passwort, ist nur für lokale Tests gedacht, und kein Store akzeptiert ihn. Der Release-(Upload-)Keystore ist derjenige, den Sie selbst mit keytool erzeugen, dessen Passwort nur Sie kennen, und mit dem das an den Store hochgeladene Paket signiert wird.
Sollte ich die Keystore-Datei zu meinem Projekt-Repository (git) hinzufügen?
Nein. Die Keystore-Datei und key.properties sollten in die .gitignore aufgenommen und nie committet werden; ein Leak in ein öffentliches Repository würde es jedem, der den Schlüssel erlangt, ermöglichen, Pakete unter der Identität Ihrer App zu signieren.