it-swarm.com.de

Die apk muss mit den gleichen Zertifikaten wie die vorherige Version signiert sein

Ich hatte meine App vor einiger Zeit bei Google Play hochgeladen (damals, als sie Android Market hieß).

Heute habe ich die App aktualisiert, aber ich hatte den vorherigen Schlüsselspeicher gelöscht und einen neuen erstellt.
Beim Hochladen heißt es, dass der APK mit den gleichen Zertifikaten wie die vorherige Version signiert sein muss:

Upload fehlgeschlagen

Sie haben eine APK, die mit einem anderen Zertifikat signiert ist, zu Ihren früheren APKs hochgeladen. Sie müssen das gleiche Zertifikat verwenden.

Ihre bestehenden APKs werden mit den Zertifikaten mit Fingerabdruck (en) signiert:
[SHA1: 89: 2F: 11: FE: CE: D6: CC: DF: 65: E7: 76: 3E: DD: A7: 96: 4F: 84: DD: BA: 33]
und die Zertifikate, die zum Signieren der von Ihnen hochgeladenen APK verwendet werden, haben Fingerabdrücke:
[SHA1: 20: 26: F4: C1: DF: 0F: 2B: D9: 46: 03: FF: AB: 07: B1: 28: 7B: 9C: 75: 44: CC]

Ich habe jedoch dieses Zertifikat nicht und möchte die Anwendung nicht löschen und erneut veröffentlichen, da sie über aktive Benutzer verfügt.

Wie kann ich meine App mit einem neuen Zertifikat signieren?

168
arts777

Nichts. Lesen Sie die Dokumentation: Veröffentlichen von Updates im Android Market

Stellen Sie vor dem Hochladen der aktualisierten Anwendung sicher, dass Sie die Attribute Android: versionCode und Android: versionName im Element der Manifestdatei erhöht haben. Außerdem muss der Paketname derselbe sein und the .apk muss mit demselben privaten Schlüssel signiert sein. Wenn der Paketname und das Signaturzertifikat nicht mit denen der vorhandenen Version übereinstimmen, betrachtet Market diese als neue Anwendung und bietet sie den Benutzern nicht als Update an.

167
Rubycon

Haben Sie versehentlich mit dem Debug-Schlüssel unterschrieben?

Mit Google Play können Sie keine mit Ihrem Debug-Keystore signierte App veröffentlichen. Wenn Sie versuchen, eine solche APK hochzuladen, schlägt Google Play mit der Meldung fehl: "Sie haben eine APK hochgeladen, die im Debug-Modus signiert wurde. Sie müssen Ihre APK im Release-Modus signieren."

Wenn Sie jedoch versuchen, ein Update hochzuladen, das mit dem Debug-Keystore signiert ist, wird diese Meldung nicht angezeigt. Google Play zeigt die in der Frage angezeigte Nachricht an, die sich auf SHA1-Fingerabdrücke bezieht.

Prüfen Sie also zunächst, ob Sie die App versehentlich mit Ihrem Debug-Schlüssel signiert haben.


Wie überprüfe ich, welche Signaturschlüssel verwendet wurden?

Sammeln Sie die Informationen aus der APK

Mit den folgenden Befehlen können Sie überprüfen, mit welchen Zertifikaten das ursprüngliche APK und das Update-APK signiert wurden. Verwenden Sie dazu Java keytool:

keytool -list -printcert -jarfile original.apk
keytool -list -printcert -jarfile update.apk

Dies zeigt Ihnen detaillierte Informationen darüber, wie ein APK signiert wurde, zum Beispiel:

Owner: CN=My App, O=My Company, L=Somewhere, C=DE
Issuer: CN=My App, O=My Company, L=Somewhere, C=DE
Serial number: 4790b086
Valid from: Mon Nov 11 15:01:28 GMT 2013 until: Fri Mar 29 16:01:28 BST 2041
Certificate fingerprints:
  MD5:  A3:2E:67:AF:74:3A:BD:DD:A2:A9:0D:CA:6C:D4:AF:20
  SHA1: A6:E7:CE:64:17:45:0F:B4:C7:FC:76:43:90:04:DC:A7:84:EF:33:E9
  SHA256: FB:6C:59:9E:B4:58:E3:62:AD:81:42:...:09:FC:BC:FE:E7:40:53:C3:D8:14:4F
         Signature algorithm name: SHA256withRSA
         Version: 3

Die hier zu beachtenden wichtigen Teile - für jede APK - sind der SHA1 Fingerabdruckwert, der Eigentümer Identitätswert und das Gültig von/bis Datum.


Wenn der Befehl keytool nicht funktioniert (für die Option -jarfile ist Java 7 erforderlich), können Sie über den Befehl jarsigner grundlegendere Informationen abrufen:

jarsigner -verify -verbose:summary -certs original.apk
jarsigner -verify -verbose:summary -certs update.apk

Dies zeigt leider nicht den SHA1-Fingerabdruck, sondern die X.509-Besitzeridentität zusammen mit den Ablaufdaten des Zertifikats. Zum Beispiel:

sm  4642892 Thu Apr 17 10:57:44 CEST 2014 classes.dex (and 412 more)

    X.509, CN=My App, O=My Company, L=Somewhere, C=DE
    [certificate is valid from 11/11/13 12:12 to 29/03/41 12:12]
    [CertPath not validated: Path does not chain with any of the trust anchors]

Sie können jede Meldung "CertPath nicht validiert" sowie Warnungen zu Zertifikatketten oder Zeitstempeln ignorieren. Sie sind in diesem Fall nicht relevant.

Vergleichen Sie die Werte für Eigentümer, SHA1 und Ablaufdatum zwischen den APKs

  • Wenn der Besitzer / X.509 Identitätswert ist CN=Android Debug, O=Android, C=US, dann haben Sie das APK mit Ihrem Debug-Schlüssel und nicht mit dem ursprünglichen Release-Schlüssel signiert

  • Wenn der SHA1 Fingerabdruckwert zwischen den Original- und Update-APKs unterschiedlich ist, haben Sie nicht benutze für beide APKs den gleichen Signaturschlüssel

  • Wenn die Besitzer / X.509 Identitätswerte unterschiedlich sind, oder die Das Ablaufdatum des Zertifikats unterscheidet sich zwischen den beiden APKs. Dann haben Sie nicht für beide APKs den gleichen Signaturschlüssel verwendet

Beachten Sie, dass auch wenn die Owner/X.509-Werte zwischen den beiden Zertifikaten identisch sind, dies nicht bedeutet, dass die Zertifikate identisch sind - wenn etwas anderes nicht übereinstimmt - wie z. B. die Fingerabdruckwerte - dann sind die Zertifikate unterschiedlich.


Suchen Sie nach dem ursprünglichen Keystore und überprüfen Sie die Sicherungen

Wenn die beiden APKs unterschiedliche Zertifikatinformationen haben, müssen Sie den ursprünglichen Schlüsselspeicher finden , d. H. Die Datei mit dem ersten SHA1-Fingerabdruckwert, den Google Play (oder keytool) Ihnen mitgeteilt hat.

Durchsuchen Sie alle Keystore-Dateien, die Sie auf Ihrem Computer finden, und alle Backups, bis Sie die mit dem richtigen SHA1-Fingerabdruck haben:

keytool -list -keystore my-release.keystore

Drücken Sie einfach Enter Wenn Sie zur Eingabe des Kennworts aufgefordert werden, müssen Sie es nicht unbedingt eingeben, um den SHA1-Wert schnell zu überprüfen.


Ich kann den ursprünglichen Keystore nirgendwo finden

Wenn Sie den ursprünglichen Keystore nicht finden können, können Sie niemals Updates für diese bestimmte App veröffentlichen.

Android erwähnt dies ausdrücklich auf der Seite Signing Your Application :

Warnung: Bewahren Sie Ihren Schlüsselspeicher und Ihren privaten Schlüssel an einem sicheren Ort auf und stellen Sie sicher, dass Sie sichere Backups davon haben. Wenn Sie eine App bei Google Play veröffentlichen und dann den Schlüssel verlieren, mit dem Sie Ihre App signiert haben, können Sie keine Updates für Ihre App veröffentlichen, da Sie immer alle Versionen Ihrer App signieren müssen mit dem gleichen Schlüssel.

Nach der ersten Veröffentlichung einer APK müssen alle nachfolgenden Veröffentlichungen mit genau demselben Schlüssel signiert werden.


Kann ich den ursprünglichen Signaturschlüssel aus der ursprünglichen APK extrahieren?

Nein das ist nicht möglich. Das APK enthält nur öffentliche Informationen und nicht Ihre privaten Schlüsselinformationen.


Kann ich auf einen neuen Signaturschlüssel migrieren?

Nein. Auch wenn Sie das Original finden, können Sie keine APK mit Schlüssel A signieren. Signieren Sie dann das nächste Update mit den Schlüsseln A und B und signieren Sie anschließend das nächste Update nur mit Schlüssel B.

Das Signieren einer APK (oder einer beliebigen JAR-Datei) mit mehreren Schlüsseln ist technisch möglich , Google Play akzeptiert jedoch keine APKs mit mehreren Signaturen mehr.

Wenn Sie dies versuchen, wird die Meldung "Ihre APK wurde mit mehreren Zertifikaten signiert. Bitte signieren Sie sie nur mit einem Zertifikat und laden Sie sie erneut hoch."


Was kann ich machen?

Sie müssen Ihre App mit einer neuen Anwendungs-ID erstellen (z. B. von "com.example.myapp" in "com.example.myapp2" ändern) und einen brandneuen Eintrag bei Google Play erstellen.

Möglicherweise müssen Sie auch Ihren Code ändern, damit Benutzer die neue App installieren können, auch wenn sie die alte App installiert haben, z. Sie müssen sicherstellen, dass keine widersprüchlichen Inhaltsanbieter vorhanden sind.

Sie verlieren Ihre vorhandene Installationsbasis, Überprüfungen usw. und müssen einen Weg finden, Ihre bestehenden Kunden dazu zu bringen, die alte App zu deinstallieren und die neue Version zu installieren.

Stellen Sie erneut sicher, dass Sie sichere Sicherungen des Keystores und der Kennwörter haben, die Sie für diese Version verwenden.

104
Christopher Orr

Nichts - Google sagt eindeutig, dass die Anwendung anhand der zum Signieren verwendeten Schlüssel identifiziert wird. Wenn Sie die Schlüssel verloren haben, müssen Sie daher eine neue Anwendung erstellen. 

Heute stand ich vor demselben Problem, leider hatte ich zwei Aliase in meiner Keystore-Datei . enter image description here

6
Krishan

Hier bekomme ich die Antwort auf diese Frage. Nachdem ich zu lange gesucht habe, knacke ich den Schlüssel und das Passwort. Ich vergesse meinen Schlüssel und Alias ​​auch die JKS-Datei, aber zum Glück kenne ich die Menge des Passworts, was ich hineingelegt hatte. aber die richtigen Kombinationen dafür zu finden, war für mich die schwierigste Aufgabe. 

Lösung - Laden Sie dieses herunter - Keytool IUI Version 2.4.1 plugin  enter image description here

das Fenster wird jetzt angezeigt. Es zeigt den Aliasnamen. Wenn Ihre JKS-Datei korrekt ist. Klicken Sie mit der rechten Maustaste auf den Aliasnamen und klicken Sie auf "Zertifikatskette anzeigen" ...,. Der SHA1-Schlüssel wird angezeigt Schlüssel mit dem Schlüssel, den Sie erhalten, während Sie die APK im Google App Store hochgeladen haben ... 

wenn es passt, sind Sie mit der richtigen JKS-Datei und Alias. 

glück, ich habe eine Menge Passwort, um zu passen ..  enter image description here

gehen Sie nun zu diesem scrren und geben Sie den gleichen Pfad ein. Geben Sie den Pfad in das Feld "Zertifikatdatei" ein.

wenn auf dem Bildschirm ein Fehler angezeigt wird, stimmt das Passwort nicht überein. Wenn kein Fehler angezeigt wird, bedeutet dies, dass Sie mit der richtigen JKS-Datei arbeiten. korrektes Alias ​​und Passwort () Jetzt können Sie Ihre apk in den Play Store hochladen :) 

4
Arun Yadav

Wenn Sie eine vorherige Apk-Datei bei sich haben (Backup), dann verwenden Sie jarSigner, um das Zertifikat von dieser Apk zu extrahieren, dann verwenden Sie diesen Schlüssel oder verwenden Sie keytool, um dieses Zertifikat zu klonen. Vielleicht hilft das ... Hilfreiche Links sind jarsigner) docs und keytool docs .

3
om252345

Ich hatte das gerade aus heiterem Himmel vorgefunden. Ich glaube wirklich nicht, dass ich etwas verändert habe.

Es wurde jedoch durch "Build"/"Clean Project" behoben.

1
Dave Hubbard

Ich empfehle Keystore Explorer ( https://keystore-Explorer.org/ ) wärmstens, mit dem Sie auf Ihren Keystore zugreifen können, ohne ihn in Google Play hochladen zu müssen. Auf diese Weise können Sie feststellen, ob Sie Ihr Kennwort falsch eingeben.

1
drdiv

Mein [alberner] Fehler war, dass ich die Datei app-debug.apk anstelle der Datei app-release.apk verwendet habe. Sie müssen "release" in "Build Variants" auswählen, wenn Sie signierte APK generieren. Die Datei app-release.apk sollte sich in Ihrem Projektstamm im Ordner "app\release" befinden.

0
M. Marmor

Ich war vor kurzem mit diesem Problem konfrontiert, nachdem ich verschiedene Anmeldemethoden ausprobiert hatte, z. B. V1 oder V2 aktivieren, angemeldet durch Ändern des Aliasnamens und wissen Sie zuletzt, dass ich eine falsche Schlüsselspeicherdatei verwende 

0
user2837615

Sie können die neue Funktion zum Signieren von Google Play-Apps verwenden, um eine neue Schlüsseldatei zu generieren.

Ab Mai 2017 bietet der Google Play Store eine neue Funktion im Play Store und "It's Good News For Android Developers". Mit dieser Funktion können Entwickler ihre App oder Apk aktualisieren, die eine KeyStore-Datei verloren haben. Sie müssen die Google Play App-Signatur in der Play Store-Konsole aktivieren.

https://support.google.com/googleplay/Android-developer/answer/7384423?hl=de

http://www.geekcodehub.com/2018/05/23/keystore-lost-in-Android/

0
Gibs