Episode 14 Androidアプリをリリースする時の署名について

ブログ

皆さんこんにちは、グレキチです。
3月20日の春分の日を過ぎてから、ようやく気温が安定して上がって暖かくなってきました。朝布団から出るのも、やっと億劫ではなくなりますね😄

さて今回の内容ですが、Androidアプリをリリースする際に必要となる署名について話したいと思います。私が初めてアプリをリリースした際に、この署名対応にかなり時間を使ったのを今でも覚えています😢

アプリ開発で署名を行うためのツールはいくつかあるのですが、以前のブログでも書いた通り、私の場合、アプリ開発のフレームワークはKivyを使っているため、アプリリリース用データの生成にはBuildozerというビルドツールを使っています。そのため、署名対応は手作業になるので、今回はその方法についての説明になります。Android Studioを使ってデータを生成する場合は、もっと簡単に出来るようですが・・・。

署名とは?

ここで言っている署名とは、リリース用データがアプリ制作者本人のものであるという証明書などを使って行う、デジタル署名のことです。アプリが不正にアップデートされることを防ぐための、セキュリティ上の対応ですね。
それで、その署名プロセスには、アップロード鍵で行うものとアプリ署名鍵で行うもの、の大きく2つのステップがあります。各々のプロセスの意味合いを、できるだけ分かりやすく簡単に説明すると、

  アップロード鍵での署名: アプリ署名用としてGoogle Playにリリース用データをアップロードする前に、リリース用データに施す署名のこと。

  アプリ署名鍵での署名 : Google Playからユーザーデバイスにインストールされるデータに施す署名のこと

となります。(理解できました?😅)
なお、上記内容は、下記サイトより引用させて頂きました。

 サイトリンク: Androidデベロッパーサイト

この2プロセス中、アプリ署名鍵の対応はGoogle Play上で出来るので、今回は特に説明せず、1番目のアップロード鍵での署名の方法についてより詳しく説明することにします。

アップロード鍵署名の方法

アップロード鍵での署名には、その記載の通り、アップロード鍵が必要です。鍵の生成に当たっては、Javaのツールである”keytool”というものを今回使用します。そのため、Javaが作業PCにインストールされていない場合は、下記サイトから予めインストールしておいて下さい。

 ダウンロードサイト: Javaのダウンロード

準備が整ったら、いよいよ作業説明に移ります。
まずは、鍵データを保存するフォルダを作成するところから始めて、以下の番号で記載した項目順に進めます。
※この後の作業は、全てターミナル(Windowsの場合はコマンドプロンプト)で行うので、ターミナルが立ち上がっているものとして、以降の説明は続けます。

1.鍵データ保存フォルダの作成
 鍵データの保存フォルダを作成します。一般的には、フォルダ名には”keystores”と設定されることが多いようですが、そういった名前のフォルダを、PC内の任意の安全な場所に作成します。フォルダ階層が深いと後で探すのが大変なので、階層は極力浅い方が良いと思います。なお、このフォルダは後でアプリを更新する際に必要になります

2.鍵作成コマンドの実行
 下記のコマンドをタイプして実行します。各< >括弧内に記載する内容は、あらかじめ任意で決めてから実行して下さい。
※下記のフォルダ指定先(~/keystoresのところ)は参考なので、ご自分で作成したフォルダの場所を正しく記載して下さい

keytool -genkey -v -keystore ~/keystores/<your-new-key>.keystore -alias <your-key-alias> -keyalg RSA -keysize 2048 -validity <set-number-of-days>

 <your-new-key> : キーストアの名前 (任意。アプリ名などを参考に半角英語で設定
 <your-key-alias> : キーの名前 (通常はアプリ名を半角英語で設定
 <set-number-of-days> : キーの有効期間 (任意。通常は30年弱の“10,000”で半角で設定

3.質問への回答
 上のコマンドを実行すると、自動返答で質問が来るので、回答する必要があります。しかし、この質問への回答は、企業がアプリをリリースする場合に重要なものになるようなので、個人でアプリをリリースする場合は、適当に入力すればOKです。

4.キーストアとキーのパスワード設定
 手順3に続いて、キーストアとキーのパスワードの入力を求められるので、任意のパスを入力します。この時の注意として、両方に同じパスを入力して下さい。そうしないと、以降のステップが失敗してプロセスが完了できなくなってしまうので。

5.キーフォーマットの変換
 手順2で作成したキーですが、実は秘密鍵と公開鍵という2つの鍵が作成されています😳。その理由については、“暗号技術”を勉強してみて下さいね(笑)。
その2つの鍵を各々個別に管理すると面倒なので、便宜上まとめて保管できるように、キーのフォーマットをPKCS12というものに変換する作業を行います。そのために、以下のコマンドを実行します。
※下記の<your-new-key>は、手順2で設定した名前に置き換えて下さい。

keytool -importkeystore -srckeystore ~/keystores/<your-new-key>.keystore -destkeystore ~/keystores/<your-new-key>.keystore -deststoretype pkcs12

上記コマンドを実行すると、キーストアフォルダ内に〇〇.keystoreと〇〇.keystore.oldが作成されていると思います。このようにデータが作成されていたら、コマンド実行が正常に実行されたということです。

6.署名の吐き出し処理
 手順5まで完了したら、署名をリリースデータに添付するための吐き出し処理を行います。
以下の4行のコマンドを上から順番に実行します。なお、2行目から4行目までは、個別入力内容の前後を二重引用符(”)で必ず囲んで下さい。

export P4A_RELEASE_KEYSTORE=~/keystores/<your-new-key>.keystore
export P4A_RELEASE_KEYSTORE_PASSWD="<your-keystore-password>"
export P4A_RELEASE_KEYALIAS_PASSWD="<your-keystore-password>"
export P4A_RELEASE_KEYALIAS="<your-key-alias>"

 <your-new-key> : 手順2で設定したキーストアの名前
 <your-keystore-password> : 手順4で設定したパスワード
 <your-key-alias> : 手順2で設定したキーの名前

7.リリースデータへの署名の添付
 いよいよオーラスです。手順6が完了しても、ターミナルを閉じずに、そのままリリースデータのコンパイルディレクトリまで移動して、“buildozer -v android release” コマンドでリリースデータを作成します。すると、生成された.aabデータには、署名が添付された状態になります。これで、晴れてGoogle Playにデータをアップロードできるようになります。
めでたし、めでたし😄

終わりに

はい、と言うことで今回は、アプリ開発される方に向けたかなりニッチな内容でしたが、いかがだったでしょうか?
今回紹介した内容は、以下のリンク先の情報を参考に作成させてもらいました。もしかして、上記内容だけでは説明足らずと思われた場合は、こちらのサイトを確認されると良いかもしれません。

 参考にしたサイト: Creating a Release AAB using p4a\buildozer.md

こういった一見大したこと無いような内容が、IT開発関連では意外と貴重だったりすることを私は肌で感じているので、いつかどなたかの役に立てば良いかなと期待します。

それでは、今回は以上です🖐️