web-dev-qa-db-ja.com

証明書が異なるため、更新されたAPKをGoogle Playにアップロードできません

Android Studioを使用してAndroidプロジェクトをビルドし、APKをGoogle Playにアップロードすると、使用しているにもかかわらずこのエラーが表示され続けます同じキーストアアプリの以前のバージョンで使用したもの:

アップロードに失敗しました

以前のAPKとは異なる証明書で署名されたAPKをアップロードしました。同じ証明書を使用する必要があります。

既存のAPKは、指紋付きの証明書で署名されています:
[SHA1:89:2F:11:FE:CE:D6:CC:DF:65:E7:76:3E:DD:A7:96:4F:84:DD:BA:33]
およびアップロードしたAPKの署名に使用される証明書には指紋があります:
[SHA1:20:26:F4:C1:DF:0F:2B:D9:46:03:FF:AB:07:B1:28:7B:9C:75:44:CC]

18
user3871129

まず、Google Playがここで間違っている可能性は低いです。デバッグキーを誤って使用しなかったと確信していますか?

使用した署名キーを確認してください

次のコマンドを使用して、古いAPKと新しいAPKに含まれる証明書を再確認する必要があります。

jarsigner -verify -verbose:summary -certs old.apk
jarsigner -verify -verbose:summary -certs new.apk

次のように、各APKで署名されたファイルに関する情報が表示されます。

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

    X.509, CN=My App, O=My Company, C=DE, L=Köln
    [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]

新しいAPKにX.509, CN=Android Debug, O=Android, C=US、その後、元のリリースキーではなくデバッグキーでAPKに署名しました。

X.509 ID文字列が異なる場合、または2つのAPK間で証明書の日付が異なる場合は、notを使用したことを確認しただけです。両方のAPKに同じ署名キー。

「CertPath not validated」メッセージは無視できます。この場合は関係ありません。

元のキーストアを検索する

証明書情報が異なる場合は、元のキーストア、つまりGoogle Playから通知された最初のSHA1値を持つファイルを見つける必要があります。

正しいSHA1フィンガープリントを持つものが見つかるまで、見つけることができるすべてのキーストアファイルを検索します。

keytool -list -keystore my-release.keystore

元のキーストアが見つかりません

元のキーストアが見つからない場合は、neverこの特定のアプリの更新を公開できません。

Androidは、これを アプリケーションの署名 ページで明示的に言及しています。

警告:キーストアと秘密鍵を安全で安全な場所に保管し、それらの安全なバックアップがあることを確認してください。 Google Playにアプリを公開してからアプリに署名したキーを紛失した場合、アプリのすべてのバージョンに常に署名する必要があるため、アプリの更新を公開することはできません同じキーで。

APKの最初のリリース後、後続のすべてのリリースはまったく同じキーで署名する必要があります。

元のAPKから元の署名キーを抽出できますか?

いいえ、これは不可能です。 APKには公開情報のみが含まれ、秘密鍵情報は含まれません。

新しい署名キーに移行できますか?

いいえ。元のファイルを見つけても、キーAでAPKに署名してから、キーAとBの両方で次のアップデートに署名してから、キーBのみで次のアップデートに署名することはできません。

複数のキーを使用してAPK(または任意のJARファイル)に技術的に署名できますが、Google Playは複数の署名を持つAPKを受け入れません。

私に何ができる?

新しいアプリケーションIDを使用してアプリを構築し(たとえば、「com.example.myapp」から「com.example.myapp2」に変更する)、Google Playで新しいリストを作成する必要があります。

おそらく、古いアプリがインストールされていても人々が新しいアプリをインストールできるようにコードを変更する必要があります。競合するコンテンツプロバイダーがいないことを確認する必要があります。

既存のインストールベース、レビューなどが失われ、既存の顧客に古いアプリをアンインストールして新しいバージョンをインストールさせる方法を見つける必要があります。

繰り返しますが、このバージョンで使用するキーストアとパスワードのバックアップがあることを確認してください。

44
Christopher Orr