web-dev-qa-db-ja.com

Google Playが提供するアップロードキーでAPKに署名する

Google Playアプリの署名を使用して、Google Playにアプリをアップロードする方法を理解しようとしています。

ここに私がやったことがあります:

  1. アプリを作成しました
  2. Keytool.exeを使用して、そのアプリのキーを生成しました
  3. アプリをGoogle Playにアップロードしました
  4. Google Playアプリの署名に登録済み
  5. 成功せずにアプリをもう一度アップロードしてみてください。

証明書が証明書ではないと文句を言います

新しいAPKをプロダクションにアップロードする

アップロードに失敗しましたアップロード証明書で署名されていないAPKをアップロードしました。同じ証明書を使用する必要があります。アップロード証明書には指紋があります:[SHA1:0C:...]およびアップロードしたAPKへの署名に使用される証明書には指紋があります:[SHA1:2D:...]

しばらく探した後。 Google Playコンソールに投稿された証明書をキーストアに配置する方法を見つけました。このようなもの:

keytool.exe -importcert -file upload.pem -keystore myapp-release-key.keystore

証明書が入っているようです。キーストアの内容を一覧表示すると、次のようになります。

keytool.exe -list -keystore trackcoachfull-release-key.keystoreキーストアパスワードを入力します。

キーストアタイプ:JKSキーストアプロバイダー:Sun

キーストアには2つのエントリが含まれています

myappfull、2017年5月18日、PrivateKeyEntry、証明書フィンガープリント(SHA1):2D:... uploadkey、2017年5月19日、trustedCertEntry、証明書フィンガープリント(SHA1):0C:...

今、私がブロックされている場所...

Android St​​udioで、uploadkeyを使用して署名付きAPKを生成しようとしました。

ビルド>署名済みAPKの生成上記のキーストアを選択しますキーストアパスワードを入力しますキーエイリアスとしてuploadkeyを選択しますキーパスワードの入力を強制します。

Android St​​udioのエラー:

エラー:タスク ':app:packageFullRelease'の実行に失敗しました。

com.Android.ide.common.signing.KeytoolException:ストア "C:\ Users\Admin\AndroidStudioProjects\keystores\myappfull-release-key.keystore"からキーuploadkeyを読み取れませんでした:信頼できる証明書エントリはパスワードで保護されていません

私の質問はこれです:

Google Playが提供するアップロードキーで署名されたAPKを生成するにはどうすればよいですか?

ありがとう

42
Ronald

Google Playが提供するアップロードキーを使用してAPKに署名することができました。新しいアプリのために従った手順は次のとおりです。

  1. キーストアを作成し、Android St​​udioを使用して署名キーを追加します
  2. (1)で作成したキーを使用してアプリに署名します
  3. APKをGoogle Playにアップロードします
  4. Google Playコンソールから「証明書をアップロード」をダウンロードします
  5. コマンドkeytool.exe -importcert -file upload_cert.der -keystore <keystorefile>を使用して、ダウンロードした証明書を手順(1)で作成したキーストアに追加します
  6. 「証明書はすでにエイリアスの下のキーストアに存在します。追加しますか?[いいえ]:」というプロンプトが表示されます。
  7. 「y」と入力してEnterキーを押します
  8. 確認メッセージが表示されます
  9. 以降のビルドでは、(2)と同じプロセスを使用してアプリに署名します

ここで注意すべき重要な点は、手順(6)で、keytoolのインポートが元の証明書をGoogle Playからダウンロードした証明書で更新することです。

51
Ayaz Aslam

短い答え:

Google Play Consoleでアップロード証明書を使用してAPKに署名することはできません。

うまくいけば、この答えが、他の人が存在しない解決策を見つけようとして時間を浪費するのを防ぐでしょう。


長い答え:

Google Playサポート記事 アプリの署名キーの管理 には、これを理解するために必要な情報があります。

キーの種類の重要な定義」セクションから:

  • キーのアップロード(既存のアプリのオプション):プログラムへの登録中に生成する新しいキー。 Play Consoleにアップロードする前に、アップロードキーを使用して将来のすべてのAPKに署名します。
  • プライベートキー:APK署名の場合、これはAPKの署名に使用されるキーです。秘密鍵は秘密にしておく必要があります。
  • 公開鍵:APK署名の場合、これはAPKの署名を検証するために使用される鍵です。公開鍵は誰でも見ることができます。
  • Certificate:証明書には、公開鍵と、鍵の所有者に関する追加の識別情報が含まれています。

次に、Google Play Consoleでは、アップロード証明書アップロードキーではなく) )。上記の定義に基づいて、次のことを結論付けることができます。

  1. アップロードキーはプライベートキーです。これは、アップロードキーがAPKの署名に使用されるためです。
  2. 一般に証明書には秘密鍵ではなく公開鍵が含まれているため、アップロード証明書には秘密鍵が含まれていません(例外はありますが、この場合)。
  3. したがって、どのような手順を実行しても、アップロード証明書を使用してAPKに署名することはできません。必要な情報が含まれていないだけです。

さらに証拠として この他のSO質問(Android署名エラー:信頼できる証明書エントリはパスワードで保護されていません) は同じ問題に対処しますが、アップロードキー/証明書を参照しないため、この質問の意味を見逃すのは簡単です。GooglePlayからダウンロードできないものは何もこの問題を解決しないということです。


反対の主張

Google Playからダウンロードしたアップロード証明書を使用してAPKに署名できると報告する人もいますがIS、何が起こったのか誤解していると思います。通常、これらのレポートは、キーの生成に使用された元のキーストアに証明書をインポートする必要があることを示していることに注意してください。実際、APKに署名するために必要な(プライベート)キーをインポートしていると考えると、実際には単に公開キーをインポートし、キーペアの公開半分を証明書でエクスポートされた公開キーで上書きするだけです。そもそも。

インポート手順を実行せずにそのエイリアスを使用してAPKに署名しようとした場合、同様に機能していました。 (インポートは何も変更しませんでした。)これが、インポートが新しいキーストアではなく元のキーストアで使用された場合にのみ機能するように見える理由です。


では、代わりに何ができますか?

それはあなたの状況次第です。目標はAPKに署名し、Googleに正常にアップロードすることです。

  1. 「Google Playによるアプリ署名」のセットアップ中のある時点で、誰かがアップロードキーを生成してGoogleに登録しました。まだその(プライベート)キーがキーストアにある場合は、APKに署名するために必要なものです。
  2. keytool以外のツールでアップロードキーを生成し、それをキーストアにインポートし、元の生成ファイルがまだある場合は、使用したプロセスを使用して、秘密キーを別のキーストアに再度インポートできます。初めて。
  3. 上記のいずれもオプションではない場合は、 アプリ署名キーの管理の記事 の「新しいアップロードキーを作成する」セクションの指示に従って、新しいアップロードキーを生成し、Googleにそれをスワップさせることができます。
22
zacronos

「Java\bin」フォルダから次のようなキーストアを生成したはずだと思います。

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

Youtアプリを更新する場合は、生成したものと同じキーストアを使用する必要があります。

  1. [ビルド]> [署名済みAPKの生成]に移動します。

  2. [既存を選択]を選択し、キーストアパスを参照します

  3. 「キーストアのパスワード」を入力してください

  4. キーエイリアスで[...]をタップし、キーエイリアスがキーストアの生成中に指定したものと同じかどうかを確認します。

  5. 「はい」の場合、「キーパスワード」を再度入力します

  6. 「次へ」をタップします

どのステップで問題が発生しているのか教えてください。それに応じてガイドできます。

3
Patrick R

場合によっては、1つのキーストアに2つの証明書があり、それらはエイリアス名またはパスワードによって区別されます。キーストアの両方のエントリのプロパティを確認してください。いずれかが正しいエイリアス名を持つ有効なキーであると確信しています。次のコマンドを使用します。

Keytool -list -keystore WeatherForecast.jks(キーストア)

パスワードの入力を求められたらEnterキーを押します。

2つのエントリが表示され、最初のWordがキーストアのエイリアスになります。

それは私のために働いたし、きっとあなたのために働くと思う。

1
Shubham Kajaria

Googleに連絡し、以下の手順に従って新しいキーを生成し、証明書をアップロードする必要がありました。

新しいアップロードキーは、PlayにアップロードするAPKの署名に使用されます。

新しいアップロードキーを生成して登録する方法は次のとおりです。

  1. Android St​​udioヘルプセンターの手順に従って、新しいキーを生成します。以前のキーとは異なる必要があります。または、次のコマンドラインを使用して新しいキーを生成できます。keytool -genkeypair -alias upload -keyalg RSA -keysize 2048 -validity 9125 -keystore keystore.jks

このキーは2048ビットのRSAキーであり、25年の有効期間が必要です。

2.そのキーの証明書をPEM形式にエクスポートします:keytool -export -rfc -alias upload -file upload_certificate.pem -keystore keystore.jks

3.このメールに返信し、upload_certificate.pemファイルを添付します。

0
Manoj Alwis