Androidの署名について
アプリを新規に作成する機会があり、久々に混乱したこともあったのでまとめました。初心者向けです。
アップロードキーとキーストアの生成
アプリを署名・アップロードする際に必要なものについて準備します。
AndroidStudioのメニューからBuild > Generate Signed Bundle / APK...を選択します。Flutterのプロジェクトを開いている場合はこのメニューが表示されませんので、androidパッケージの中をAndroidStudioで開いてください。
AppBundleとAPKの選択肢が表示されますが、それはどちらでも構いません。その後、下のようなダイアログが表示されるのでCreate new...を選択します。
すると、以下の画面でキーストアとキーの生成ができるようになります。
ここで用語を噛み砕いて説明すると、キーストアはファイル本体で、その中に複数のキーを含めることができます。ここでは、キーストアに[upload]という名前(Alias)のアップロード用のキーを1つだけ作っています。パスワードが2つ必要なのも、キーストア本体と、その中の各キーそれぞれにパスワードが必要なためです。
キーのCertificateはこのキーストアの所有者情報です。ユーザが目にすることはありませんが、証明書情報としてアプリバイナリに組み込まれます。
First and Last Nameは名前、もしくはドメインでもOKです。Organizational Unitは所属部署、Organizationは企業名、続いて企業の所在地、Country Codeを入力します。
すべて入力したらOKを押すとキーストアの完成です。Generate Signed Bundle or APKのダイアログに戻りますが、これはキャンセルで閉じてOKです。
ちなみにKey store pathに既存のキーストアを指定すると、そのキーストアに新しいキーを追加することができます。するとアプリバイナリを生成する際、以下のようにKey aliasでキーを選択できるようになります。
あとはSigned APK/Bundleを作成する際はこのKeyで署名してアップロードすると、以後、同じKeyで署名したものしかアップロードできなくなります。
Google Play App Signingとは
公式ページから画像を拝借してきました。今までの仕組みでは、アプリを固める際に使用した署名鍵は、ストアへのアップロードから配信まで同じ署名鍵を使って行われていました。その場合、万が一署名鍵が紛失・流出した場合、対処方法がありませんでした。(新しいパッケージで公開し直すしかない)
一方、Google Play App Signingを使った場合、ストアへのアップロードは開発者が管理している署名鍵をそのまま使いますが、ストアからユーザへの配信の際はStoreが管理する別の署名鍵(開発者も入手できない)を使用します。この場合、万が一署名鍵を紛失した場合も、アップロードの署名鍵を更新するだけで今まで通り配信を続けることが可能になります。
当然、アップロードキーを更新する際はGoogleに問い合わせるなど手順が必要になりますが、復旧方法があることはとても大きなメリットです。
Google Play App Signingの設定
アプリのリリース管理 > アプリの署名を開き、Google Play App Signingの設定で「次へ」を押して有効化するだけです。有効になると以下のような表示になります。
続いて、既存アプリの話をしたいと思います。
既存のアプリをGoogle Play App Signingに対応する
「設定」>「アプリの署名」を開きます
このように3つの選択肢が表示されます。
実質、どれも同じように秘密鍵をアップロードする手順となりますが、ここでは(1)と(2)を説明します。
(1)Android Studio から鍵をエクスポートしてアップロードする
AndroidStudioのツールバーメニューから「Build」>「Generate Signed Bundle/APK」を選択
「Android App Bundle」を選択(APKでは出来ません)
通常の署名をするときと同様にkeystoreを選択し、パスワードやエイリアスを入力します。
そして「Export encrypted key for enrolling published apps in Google Play App Signing」にチェックを入れた状態でnextを押します。
次の画面でBuild TypeとFlavorが聞かれるので該当のものを選択してAppBundle生成します。
すると、指定したダウンロードフォルダに「private_key.pepk」(秘密鍵)が生成されるので、これをキャプチャ「アプリ署名の手順」内の手順2「秘密鍵をアップロード」からアップロードして完了です。
なお、その後に手順4の「セキュリティを強化するには〜」という部分が出てくるのですが、こちらはオプショナルなので対応しなくても問題ありません。デフォルトではアップロードキーとGooglePlayでの署名キーが同じものになるのですが、この手順を加えることでアップロードキーと署名キーを別のものに変更することが可能になります。
(2)Java KeyStoreから鍵をエクスポートしてアップロードする方法
コマンドが出てきて一見難しそうに見えますが、簡単です。
まず手順通りPEPKファイル(pepk.jar)を落としてきます。その後、keystoreファイルとPEPKファイルを同じフォルダに配置して、手順2のとおりそのフォルダ上でターミナルからコマンドを実行すると秘密鍵が出力されます。コマンドのうち、太字になっている部分は各自変更する部分で、順番にkeystoreファイル名、keystoreに登録したalias名、出力する秘密鍵のファイル名(出力先)となっています。黒塗りした部分はアプリごとに異なると思います。
あとは「秘密鍵をアップロード」にて出力された秘密鍵をアップロードすれば完了です。
以上です。一見難しそうには見えますが、実は操作手順は簡単になっていますので、是非お試しください。