Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要

「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

n_morioka
京都のウェブ系開発エンジニアです。 java, scala ,ruby等々やってます
furyu
プリ機やWEBサービス、ゲームなど様々なジャンルの開発をしています。人々のこころを豊かで幸せにする良質なエンタテインメントを創出していきます!
http://www.furyu.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away