Edited at

既存アプリにGoogle Play App Signingを対応させてハマったこと


概要

「App Signing対応してみてGoogle Play上は有効になったはずであるがアップロード鍵が無い」

という課題に対応していくお話です。


Google Play App Signingとは

https://developer.android.com/studio/publish/app-signing

上記公式ドキュメントであるように、Androidアプリの署名に使っていた鍵ファイルを紛失したりすると2度と更新できなくなるので、

Google Play App Signing を使用してGoogleに署名する鍵を預けましょうという仕組み。

Androidアプリ開発者はGoogle Playへアップロードするアップロード鍵を管理してそちらで署名しアップロードすることになる。

スクリーンショット 2018-10-31 15.27.43.png

メリットとしては、アップロード キーを失くしたり、キーが侵害されたりした場合は、Google に連絡して古いアップロード キーを取り消し、新しいキーを生成してもらうというリカバリ対応が取れることになる


やってみたこと

https://support.google.com/googleplay/android-developer/answer/7384423

上記Googleのドキュメントを参考に既存Androidアプリを対応していく

私が各ステップを実施していった結果を書いてみる


ステップ 1: プログラムに登録する

これは問題無い。そのままボタンをクリックするだけであった。


ステップ 2: 元の鍵を Google に送信してアップロード鍵を作成する

ここのステップは、元々使っていたkeystoreファイルをGoogle Playに登録する手順です。

具体的には keystoreファイルからPEPKツールを用いて秘密鍵を生成しそれを登録する

アップロードまで問題なく成功!


ステップ 3: キーストアを更新する

これは省略可能なのでスキップする


ステップ 4: 次のアプリの更新にアップロード鍵で署名する

ここで問題が発生する

GoogleのドキュメントやQiitaで記載されている「アップロード鍵」なるものがどうやって入手出来るかわからない

ステップ2完了後、Google Play Consoleのアプリ署名の画面は、「Google Play App Signing が有効です」と出て変化が無い

スクリーンショット 2018-10-31 15.33.38.png


  • アプリへの署名証明書

  • アップロード証明書

がDL可能なのでこれを利用するのかと色々やってみるがうまくいかない


NGだったこと

upload_cert.der からkeystoreを生成してそれでアプリを署名するんだ! みたいなWeb上の記載があるが何をやってもうまくいかない

keytool -importcert -file upload_cert.der -keystore <keystorefile> -alias <alias>

とか何とかしてもダメでした。そもそもkeystoreにentryが出来ない。出来上がったkeystoreをlistしてみて確認した

$ keytool -list -v -keystor <keystorefile> 

別名: <alias>
作成日: 2018/10/31
エントリ・タイプ: trustedCertEntry

所有者: CN=********
発行者: CN=********
シリアル番号: ********
有効期間の開始日: Mon Aug 01 10:00:00 JST 2018終了日: Fri Aug 01 10:00:00 JST 2036
証明書のフィンガプリント:
MD5: ********
SHA1: ********
SHA256: ********
署名アルゴリズム名: SHA1withRSA
バージョン: 3

*******************************************
{何もなさげ}
*******************************************


結果として

上記ステップ2完了後の証明書のフィンガープリント画面ですが良く見ると、

「アプリへの署名証明書」と「アップロード証明書」の フィンガープリントの内容が同じ である。

このことから

アップロード鍵を登録する過程がスキップされて、アップロード鍵はアプリ署名鍵と同じもので設定されている

アップロード鍵 = アプリ署名鍵

という仮説を立てた

スクリーンショット 2018-10-31 17.25.45.png


検証

もともとのアプリ証明書でアプリを署名してビルドして登録したところうまく行った。

このことから上記仮説は合っているではないかと考える。


なぜすぐに理解出来なかったのか?

既存アプリにApp Signingを登録させる過程が最近変わったのか、アップロード鍵を登録するステップが無いように見える。

そのため、最終的に何をどうしたら良いのか分からない状態におちいりやすい。

また、 アップロード鍵=アプリ署名鍵 となったとするとビルドスクリプトの変更は無く、本当にApp Signingが有効になっているか実感出来ない点もちょっとつらいところ


参考

【Android】Google Play App Signingのススメ

https://qiita.com/rkowase/items/90cdc4e8c6fc449d8276

[Android] アプリを Google Play に公開、apkファイルの作成

https://akira-watson.com/android/apk.html