Android では、APK をデバイスにインストールしたり更新したりする前に、証明書を使用してすべての APK にデジタル署名する必要があります。Android App Bundle を使用してリリースする場合は、アップロード鍵によって App Bundle に署名してから Play Console にアップロードすれば、あとは Play アプリ署名によって処理が行われます。APK を使用して Play Store または他のアプリストアで(2021 年 8 月より前に作成された)アプリを配信する場合は、APK に手動で署名してからアップロードする必要があります。
このページでは、アプリ署名とセキュリティに関する重要な概念、Google Play でリリースするアプリに Android Studio で署名する方法、Play アプリ署名を設定する方法について説明します。
以下に、新しいアプリに署名して Google Play に公開するために必要な手順の概要を示します。
アプリが既存のアプリ署名鍵を使用してすでに Google Play ストアに公開されている場合、または、新しいアプリ用のアプリ署名鍵を Google に生成させる代わりに自分で選択する場合は、次の手順を行います。
- アプリの署名鍵を使用してアプリに署名し、その署名鍵を暗号化してエクスポートするオプションを選択する
- Play アプリ署名にアプリの署名鍵をアップロードする
- (推奨)アプリの将来のアップデートに備えて、アップロード証明書を生成して登録する
- アプリを Google Play にアップロードする
- アプリのリリースを準備して公開する
このページでは、アプリを Google Play 以外のアプリストアにアップロードする際に使用する自分専用の鍵を管理する方法についても説明します。Android Studio を使用しない場合、またはコマンドラインからアプリに署名する場合は、apksigner
の使用方法を確認してください。
Play アプリ署名
Play アプリ署名を使用すると、アプリ署名鍵の管理と保護、APK 配信時の署名を Google に委託することができます。App Bundle では、APK のビルドおよび署名が Google Play ストアで行われるため、App Bundle をアップロードする前に Play アプリ署名を設定する必要があります。Play アプリ署名を設定すると、以下のようなメリットが得られます。
- Android App Bundle を使用し、Google Play の高度な配信モードをサポートできます。 Android App Bundle ではアプリのサイズを減らし、リリースを簡略化できるだけでなく、機能モジュールを使用して Instant 機能を提供できます。
- 署名鍵のセキュリティを強化できます。また、署名鍵とは別のアップロード鍵を使用して、Google Play にアップロードする App Bundle に署名できます。
新規インストール用に 1 回限りの鍵のアップグレードを行うと、既存のアプリ署名鍵が不正使用された場合や、暗号学的にさらに強い鍵に移行する必要がある場合に、アプリ署名鍵を変更できるようになります。
Play アプリ署名では、アプリ署名鍵とアップロード鍵を使用します。これらの鍵について詳しくは、鍵とキーストアについてのセクションをご覧ください。アップロード鍵は自分で保管し、Google Play ストアにアプリをアップロードする際に使用して署名します。図 1 に示すように、Google はアップロード証明書を使用して本人確認を行い、アプリ署名鍵で APK に署名してユーザーに配信します。アプリ署名鍵とは別のアップロード鍵を使用することで、鍵の紛失や不正使用があった場合にアップロード鍵のリセットをリクエストできます。
これに対して、Play アプリ署名にオプトインしていない、2021 年 8 月より前に作成されたアプリの場合は、アプリの署名鍵を紛失するとアプリを更新できなくなります。
図 1. Play アプリ署名を使用したアプリへの署名
鍵は、Google が自社の鍵の保管に使用しているものと同じインフラストラクチャに保管され、Google の鍵管理サービスによって保護されます。Google の技術インフラストラクチャについて詳しくは、Google Cloud Security のホワイトペーパーをご覧ください。
Play アプリ署名を使用しているときにアップロード鍵を失くしたり、鍵が不正使用されたりした場合は、Google に連絡して古いアップロード鍵を取り消し、新しい鍵を生成してください。アプリ署名鍵は Google によって保護されているため、アップロード鍵を変更した場合でも、新しいバージョンのアプリを元のアプリのアップデートとして引き続きアップロードできます。詳しくは、紛失または不正使用があった非公開のアップロード鍵をリセットするをご覧ください。
次のセクションでは、アプリ署名とセキュリティに関連する重要な用語と概念について説明します。次のセクションをスキップして、Google Play ストアにアップロードするアプリを準備する方法を参照する場合は、アプリに署名してリリースするをご覧ください。
キーストア、鍵、証明書
Java キーストア(.jks または .keystore)は、証明書と秘密鍵のリポジトリとして機能するバイナリ ファイルです。
公開鍵証明書(.der
または .pem
ファイル)は、デジタル証明書や ID 証明書と呼ばれることもあります。公開鍵証明書には、公開鍵 / 秘密鍵ペアの公開鍵と、それに対応する秘密鍵の所有者を識別するためのメタデータ(名前、所在地など)が格納されています。
理解しておく必要がある各種の鍵を以下に示します。
- アプリ署名鍵: ユーザーのデバイスにインストールされる APK の署名に使用する鍵。Android の安全な更新モデルの一部である署名鍵は、アプリの全期間にわたって変更されることがありません。アプリ署名鍵は誰にも知られないようにしてください。ただし、アプリ署名鍵を使用して生成した証明書を共有することは可能です。
アップロード鍵: Google Play アプリ署名用にアップロードする前に、App Bundle または APK への署名に使用する鍵。アップロード鍵は誰にも知られないようにしてください。ただし、アップロード鍵を使用して生成した証明書を共有することは可能です。アップロード鍵は次のいずれかの方法で生成できます。
- オプトインするときに Google がアプリ署名鍵を生成するように選択した場合、リリースするアプリへの署名に使用する鍵はアップロード鍵として指定されます。
- 新規または既存のアプリをオプトインするときに Google にアプリ署名鍵を提供する場合は、オプトイン時に新しいアップロード鍵を生成することも、オプトイン後にアップロード鍵を生成することもできます。これにより、セキュリティを強化できます。
- 新しいアップロード鍵を生成しない場合は、自分専用のアプリ署名鍵をアップロード鍵として各リリースへの署名に引き続き使用できます。
ヒント: 鍵のセキュリティを維持するために、アプリ署名鍵とアップロード鍵にそれぞれ別の鍵を使用することをおすすめします。
API プロバイダを利用する
Play Console の [リリース] > [設定] > [アプリの完全性] ページから、アプリ署名鍵とアップロード鍵の証明書をダウンロードできます。この証明書は、API プロバイダに公開鍵を登録するために使用します。秘密鍵が含まれていないため、共有することが想定されています。
証明書フィンガープリントは、証明書を表す一意の短い値の情報です。API プロバイダは、自身のサービスを利用するアプリを登録するためにパッケージ名と合わせて証明書フィンガープリントをリクエストすることがよくあります。アップロード鍵とアプリ署名鍵の証明書の MD5、SHA-1、SHA-256 の各フィンガープリントは、Play Console の [アプリの署名] ページで確認できます。他のフィンガープリントは、同じページから元の証明書(.der
)をダウンロードして計算することもできます。
デバッグビルドに署名する
IDE からプロジェクトを実行またはデバッグすると、Android Studio は、Android SDK ツールで生成されたデバッグ用証明書を使用して自動的にアプリに署名します。Android Studio で初めてプロジェクトを実行またはデバッグするときに、IDE がデバッグ キーストアとデバッグ用証明書を $HOME/.android/debug.keystore
に自動的に作成し、キーストアと鍵のパスワードを設定します。
デバッグ用証明書はビルドツールで作成され、設計上安全性は確保されていないため、ほとんどのアプリストア(Google Play ストアを含む)はデバッグ用証明書で署名されたアプリの公開を受け入れません。
Android Studio はデバッグ用署名情報を署名の設定に自動的に保存するため、デバッグのたびに入力する必要はありません。署名の設定は、キーストアの場所、キーストアのパスワード、鍵の名前、鍵のパスワードなど、アプリへの署名に必要なすべての情報で構成されたオブジェクトです。
デバッグ用のアプリのビルドおよび実行方法について詳しくは、アプリをビルドして実行するをご覧ください。
デバッグ証明書の有効期限
デバッグ用のアプリに署名するために使用する自己署名証明書には、作成日から 30 年の有効期限があります。証明書の期限が切れるとビルドエラーになります。
この問題を修正するには、以下のいずれかの場所に保存されている debug.keystore
ファイルを削除します。
- OS X と Linux の場合:
~/.android/
- Windows XP の場合:
C:\Documents and Settings\user\.android\
- Windows Vista、Windows 7、8、10 の場合:
C:\Users\user\.android\
デバッグ バージョンのアプリを次にビルドして実行するときに、Android Studio が新しいキーストアとデバッグ鍵を再生成します。
アプリに署名して Google Play でリリースする
アプリを公開する準備が整ったら、アプリに署名して Google Play などのアプリストアにアップロードする必要があります。アプリを Google Play に初めて公開する場合は、Play アプリ署名も設定する必要があります。2021 年 8 月より前に作成されたアプリの場合、Play アプリ署名は任意です。このセクションでは、アプリに適切に署名してリリースする方法と、Play アプリ署名を設定する方法について説明します。
アップロード鍵とキーストアを生成する
Play アプリ署名の設定に便利なアップロード鍵をまだ生成していない場合は、次のように Android Studio を使用して生成できます。
- メニューバーで、[Build] > [Generate Signed Bundle/APK] をクリックします。
- [Generate Signed Bundle or APK] ダイアログで、[Android App Bundle] または [APK] を選択し、[Next] をクリックします。
- [Key store path] のフィールドの下で、[Create new] をクリックします。
図 2 のように、[New Key Store] ウィンドウでキーストアと鍵の情報を指定します。
図 2.Android Studio で新しいアップロード鍵とキーストアを作成します。
キーストア
- Key store path: キーストアを作成する場所を選択します。また、ファイル名は、
.jks
拡張子を付けて場所のパスの末尾に追加する必要があります。 - Password: キーストアの安全なパスワードを作成し、確認します。
- Key store path: キーストアを作成する場所を選択します。また、ファイル名は、
鍵
- Alias: 鍵を識別する名前を入力します。
- Password: 鍵の安全なパスワードを作成し、確認します。キーストアのパスワードと同じにする必要があります(詳しくは、既知の問題をご覧ください)。
- Validity (years): 鍵の有効期間を年単位で設定します。鍵は少なくとも 25 年間は有効であるため、アプリの全期間を通じて同じ鍵を使用してアプリのアップデートに署名できます。
- Certificate: 証明書の所有者に関する情報を入力します。この情報はアプリには表示されませんが、APK の一部として証明書に含まれます。
フォームの入力が完了したら、[OK] をクリックします。
アップロード鍵でアプリをビルドして署名する場合は、アップロード鍵でアプリに署名する方法についてのセクションにお進みください。鍵とキーストアのみを生成する場合は、[Cancel] をクリックします。
鍵を使ってアプリに署名する
すでにアップロード鍵がある場合は、そのアップロード鍵を使用してアプリに署名します。もしアプリが既存のアプリ署名鍵によってすでに署名され、Google Play ストアに公開されている場合は、既存のアプリ署名鍵を使用してアプリに署名してから、必ずアプリを暗号化してエクスポートし、Play アプリ署名にオプトインしてください。その後のアプリのアップデートへの署名とアップロードのために、後で別のアップロード鍵を生成し、Google Play にアップロード鍵の公開鍵証明書を登録できます。
Android Studio を使用してアプリに署名し、既存のアプリ署名鍵をエクスポートする手順は次のとおりです。
- [Generate Signed Bundle or APK] ダイアログを開いていない場合は、[Build] > [Generate Signed Bundle/APK] をクリックします。
- [Generate Signed Bundle or APK] ダイアログで、[Android App Bundle] または [ APK] を選択し、[Next] をクリックします。
- プルダウンでモジュールを選択します。
キーストアへのパスと鍵のエイリアスを指定し、両方のパスワードを入力します。キーストアとアップロード鍵をまだ準備していない場合は、アップロード鍵とキーストアを生成してから、このステップに戻って操作を完了します。
図 3. アップロード鍵でアプリに署名します。
既存のアプリ署名鍵で App Bundle に署名し、後でアプリを Play アプリ署名にオプトインする場合は、[Export encrypted key] チェックボックスをオンにして、暗号化された
*.pepk
ファイルとして署名鍵を保存するパスを指定します。これで、暗号化されたアプリ署名鍵を使用して、既存のアプリを Play アプリ署名にオプトインできます。[次へ] をクリックします。
次のウィンドウ(図 4)で、署名済みアプリの保存先フォルダを指定し、ビルドタイプを選択後、該当する場合はプロダクト フレーバーを選択します。
APK をビルドして署名する場合は、アプリでサポートする [Signature Versions] を選択する必要があります。詳細については、アプリ署名方式をご覧ください。
[Finish] をクリックします。
図 4. 選択したプロダクト フレーバーでアプリの署名済みバージョンを生成します。

図 5. ポップアップのリンクをクリックすると、App Bundle の分析または検索、エクスポートされた署名鍵の検索を行うことができます。
Android Studio で署名済みアプリのビルドが終了した後、ポップアップ通知の適切なオプションをクリックして、アプリを検索または分析することができます。署名鍵をエクスポートするオプションを選択した場合、図 5 に示したポップアップの右下隅にあるプルダウン矢印をクリックして展開し、[Show Exported Key File] をクリックすることで、その署名鍵の場所に即座に移動できます。
これで、アプリを Play アプリ署名にオプトインし、アプリをアップロードしてリリースできるようになりました。アプリの公開プロセスを初めて行う場合は、リリースの概要をご覧ください。初めてでない場合は、Play Console にアプリをアップロードする方法についてのページにお進みください。
Play アプリ署名を使用する
このページですでに説明したように、Google Play で配信するアプリに署名するには、Play アプリ署名の設定が必要になります(ただし 2021 年 8 月より前に作成されたアプリの場合は、引き続き自己署名 APK が配信されます)。 必要な手順は、アプリがまだ Google Play に公開されていない場合と、2021 年 8 月より前に、既存のアプリ署名鍵を使用してアプリがすでに署名され公開されている場合とで異なります。
新しいアプリを設定する
まだ Google Play に公開されていないアプリの署名を設定する手順は次のとおりです。
- アップロード鍵を生成し、それを使用してアプリに署名します(まだ行っていない場合)。
- Play Console にログインします。
- 手順に沿ってリリースを準備して公開し、新しいリリースを作成します。
- リリース トラックを選択したら、次のように [アプリの完全性] で次のようにアプリ署名を設定します。
- Google Play で生成されたアプリ署名鍵を使ってアプリに署名する場合は、特に何もする必要はありません。最初のリリースへの署名に使用した鍵がアップロード鍵となります。それ以降のリリースへの署名にも同じ鍵を使用する必要があります。
- デベロッパー アカウントの別のアプリと同じ鍵を使用するには、[Change app signing key] > [Use my own key] > [Use the same key as another app in this account] を選択し、アプリを選択して [Continue] をクリックします。
- 自分専用の署名鍵を Google によるアプリ署名に使用する場合は、[Change app signing key] > [Use my own key] を選択し、秘密鍵と公開鍵証明書を安全にアップロードする方法としていずれかのオプションを選択します。
[App Bundle] セクションの [ファイルを選択] をクリックし、アップロード鍵で署名したアプリを見つけてアップロードします。アプリのリリースについて詳しくは、リリースの準備と公開をご覧ください。 Play アプリ署名を設定した後でアプリをリリースすると、(既存の鍵をアップロードしない限り)Google Play がアプリの署名鍵を生成して管理します。アプリのその後のアップデートへの署名は、Google Play にアップロードする前にアプリのアップロード鍵を使って行います。
アプリの新しいアップロード鍵を作成する必要がある場合は、紛失または不正使用があった非公開のアップロード鍵をリセットする方法についてのセクションにお進みください。
既存のアプリをオプトインする
すでに Google Play に公開されているアプリを既存のアプリ署名鍵を使用して更新する場合は、次の手順に沿って Play アプリ署名にオプトインします。
- まだ既存のアプリ署名鍵でアプリに署名していない場合は Android Studio を使用して署名し、[Export encrypted key] チェックボックスをオンにして、暗号化された
*.pepk
ファイルとして署名鍵を保存します。このファイルは後で必要になります。この手順は、Google Play Console からダウンロードできる PEPK ツールを使用して行うこともできます。 - Play Console にログインし、アプリに移動します。
- 左側のメニューで、[リリース] > [設定] > [アプリの完全性] をクリックします。
- 該当する場合は、利用規約を確認し、[同意する] を選択します。
- Google Play にアップロードする署名鍵に最も適したオプションを選択し、表示された手順に沿って操作します。たとえば、このページに記載されているとおりに Android Studio を使用してアプリの署名鍵をエクスポートした場合は、[Android Studio からエクスポートした鍵をアップロードする] を選択し、鍵の
*.pepk
ファイルをアップロードします。 - [登録] をクリックします。
これで、アプリの署名証明書とアップロード証明書の詳細が記載されたページが表示されるはずです。Google Play は、アプリをユーザーにデプロイする際に、既存の鍵を使用してアプリに署名します。しかし、Play アプリ署名の最も重要なメリットの 1 つは、Google Play にアップロードするアーティファクトへの署名に使用する鍵と、ユーザーに配布するアプリへの署名に Google Play が使用する鍵を区別できることです。そのため、次のセクションで説明する手順に沿って、個別にアップロード鍵を生成して登録することを検討してください。
アップロード証明書を生成して登録する
アップロード鍵で署名されていないアプリを公開している場合は、Google Play Console で、アプリの今後のアップデートで使用するアップロード鍵を登録できます。この手順は省略可能ですが、Google Play がユーザーへのアプリ配信に使用する鍵とは別の鍵を使用してアプリを公開することをおすすめします。そうすれば、Google は署名鍵のセキュリティを確保し、デベロッパーは紛失または不正使用があった非公開のアップロード鍵をリセットすることができます。このセクションでは、アップロード鍵を作成し、その鍵からアップロード証明書を生成して Google Play に登録し、アプリの今後のアップデートで使用できるようにする方法を説明します。
以下に、Play Console にアップロード証明書を登録するためのオプションが表示される状況を示します。
- 署名鍵を使用して署名された新しいアプリを公開し、Play アプリ署名にオプトインする場合。
- Play アプリ署名にすでにオプトインされている既存のアプリを公開しようとしているが、そのアプリが署名鍵を使用して署名されている場合。
Play アプリ署名にすでにオプトインされている既存のアプリのアップデートを公開せずに、アップロード証明書を登録する場合は、次の手順を行って、紛失または不正使用があった非公開のアップロード鍵をリセットする方法についてのセクションにお進みください。
まだアップロード鍵とキーストアを生成していない場合は生成します。
アップロード鍵とキーストアを作成した後、次のように keytool
コマンドを使用してアップロード鍵から公開鍵証明書を生成する必要があります。
$ keytool -export -rfc -keystore your-upload-keystore.jks -alias upload-alias -file output_upload_certificate.pem
アップロード証明書を用意できたので、Play Console でプロンプトが表示されたときに Google に登録するか、以下のセクションを確認のうえ、Google Play サポートチームを介して登録します。
アプリ署名鍵をアップグレードする
状況によっては、アプリの署名鍵の変更が必要になることがあります。たとえば、暗号学的にさらに強い鍵が必要である、署名鍵が不正使用された、というような場合です。ただし、ユーザーがアプリを更新できるのはアップデートが同じ署名鍵で署名されている場合のみであるため、公開済みのアプリの署名鍵を変更することは困難です。
アプリを Google Play に公開する場合は、公開済みのアプリの署名鍵を Google Play Console でアップグレードできます。新しい鍵が新規のインストールとアプリ アップデートへの署名に使用されるのに対し、以前のアプリ署名鍵は、鍵のアップグレードの前にアプリをインストールしたユーザーのアップデートへの署名に使用されます。
詳しくは、新しいインストール用にアプリ署名鍵をアップグレードするをご覧ください。
紛失または不正使用があった非公開のアップロード鍵をリセットする
非公開のアップロード鍵を紛失した場合、または秘密鍵が不正使用された場合は、新しい鍵を作成し、Google Play サポートチームに連絡して鍵のリセットを依頼します。
アプリに自動で署名するようビルドプロセスを設定する
Android Studio で、ビルドプロセス中にアプリのリリース バージョンに自動的に署名するようにプロジェクトを設定できます。そのためには、署名設定を作成し、リリース ビルドタイプにその設定を適用します。署名設定は、キーストアの場所、キーストアのパスワード、鍵のエイリアス、鍵のパスワードで構成されます。Android Studio で署名設定を作成してリリース ビルドタイプに適用するには、次の手順を行います。
- [Project] ウィンドウでアプリを右クリックし、[Open Module Settings] をクリックします。
- [Project Structure] ウィンドウの左側のパネルにある [Modules] で、署名するモジュールをクリックします。
- [Signing] タブをクリックし、Add アイコン
をクリックします。
-
キーストア ファイルを選択して、この署名設定の名前を入力し(複数作成する場合があるため)、必要な情報を入力します。
図 7. 新しい署名設定を作成するためのウィンドウ
- [Build Types] タブをクリックします。
- [release] ビルドをクリックします。
-
[Signing Config] で、作成した署名設定を選択します。
図 8. Android Studio で署名設定を選択します。
- [OK] をクリックします。
これで、Android Studio で [Build] > [Build Bundle(s) / APK(s)] の下のオプションを選択してリリース ビルドタイプをビルドするたびに、IDE が指定された署名設定を使用してアプリに自動的に署名するようになります。署名済み APK または App Bundle は、ビルドしたモジュールのプロジェクト ディレクトリ内の build/outputs/
ディレクトリにあります。
署名設定を作成すると、署名情報が Gradle ビルドファイルに書式なしテキストで追加されます。チームで作業している場合、またはコードを一般公開して共有する場合は、署名情報を保護する必要があるため、ビルドファイルから署名情報を削除して別の場所に保存します。署名情報をビルドファイルから削除する方法については、ビルドファイルから署名情報を削除するをご覧ください。署名情報の保護について詳しくは、鍵を保護するをご覧ください。
プロダクト フレーバーごとに異なる署名をする
アプリでプロダクト フレーバーを使用して、フレーバーごとに異なる署名を行う場合、追加の署名設定を作成し、フレーバーごとに指定できます。
- [Project] ウィンドウでアプリを右クリックし、[Open Module Settings] をクリックします。
- [Project Structure] ウィンドウの左側のパネルにある [Modules] で、署名するモジュールをクリックします。
- [Signing] タブをクリックし、Add アイコン
をクリックします。
-
キーストア ファイルを選択して、この署名設定の名前を入力し(複数作成する場合があるため)、必要な情報を入力します。
図 10. 新しい署名設定を作成するためのウィンドウ
- 必要に応じて、すべての署名設定を作成するまで手順 3 および 4 を繰り返します。
- [Flavors] タブをクリックします。
- 設定するフレーバーをクリックし、[Signing Config] プルダウン メニューから適切な署名設定を選択します。
図 11. プロダクト フレーバーごとに署名設定を行います。
さらにプロダクト フレーバーがある場合は、設定を繰り返します。
- [OK] をクリックします。
Gradle の構成ファイルで署名設定を指定することもできます。詳しくは、署名設定の設定をご覧ください。
自分専用の署名鍵を管理する
Play アプリ署名へのオプトインを選択しない場合は、2021 年 8 月より前に作成されたアプリについてのみ、自分専用のアプリ署名鍵とキーストアを管理できます。 ただし、鍵とキーストアの保護は自分の責任で行う必要があります。また、Android App Bundle、Play Feature Delivery、Play Asset Delivery をサポートできなくなります。
自分専用の鍵とキーストアを作成する準備ができたら、まず、キーストアのための安全なパスワードと、キーストアに保管する各秘密鍵のための安全なパスワードを作成します。キーストアは安全な場所に保管する必要があります。 アプリ署名鍵にアクセスできなくなったり、鍵が不正使用されたりしても、Google がアプリ署名鍵を取得することはできません。また、新しいバージョンのアプリを元のアプリのアップデートとしてユーザーにリリースすることができなくなります。詳しくは、後述の鍵を保護するをご覧ください。
図 12 に示すように、自分専用のアプリ署名鍵とキーストアを管理する場合は、APK に署名するときに、アプリ署名鍵を使用してローカルで APK に署名し、署名済み APK を直接 Google Play ストアにアップロードして配信します。
図 12. 自分専用のアプリ署名鍵を管理する場合のアプリへの署名
Play アプリ署名を使用すると、Google によって署名鍵が安全に管理され、アプリが正しく署名されていることが保証されます。また、アプリはその使用期間を通じてアップデートを受け取ることができます。ただし、アプリ署名鍵を自分で管理する場合は、留意すべき考慮事項がいくつかあります。
署名に関する考慮事項
アプリの想定される使用期間全体を通じて、同じ証明書でアプリに署名する必要があります。その理由は次のとおりです。
- アプリのアップグレード: アプリのアップデートがインストールされる際に、新しいバージョンの証明書と既存のバージョンの証明書が比較されます。証明書が一致するとアップデートが許可されます。異なる証明書を使用して新しいバージョンに署名する場合は、異なるパッケージ名をアプリに割り当てる必要があります。この場合、ユーザーは新しいバージョンを完全に新しいアプリとしてインストールします。
- アプリのモジュール性: Android では、同じ証明書で署名された APK を同一プロセスで実行できるため(アプリがそのように要求した場合)、これらは単一のアプリとして処理されます。この方法では、アプリをモジュールでデプロイでき、ユーザーは各モジュールを個別にアップデートできます。
- パーミッションによるコードとデータの共有: Android では署名に基づくパーミッションが適用されます。これにより、アプリでは、指定の証明書で署名された別のアプリに機能を公開できます。同じ証明書で複数の APK に署名し、署名に基づくパーミッション チェックを使用することによって、複数のアプリでコードとデータを安全に共有できます。
アプリのアップグレードをサポートする場合、アプリ署名鍵の有効期間は、そのアプリの想定される使用期間よりも長くなければなりません。推奨される有効期間は 25 年以上です。鍵の有効期間が切れると、ユーザーはアプリの新しいバージョンにシームレスにアップグレードすることができなくなります。
アプリを Google Play で公開する場合、アプリへの署名に使用する鍵の有効期限は 2033 年 10 月 22 日より後でなければなりません。Google Play ではこの要件を適用することで、新しいバージョンが使用可能になったときにユーザーがアプリをシームレスにアップグレードできるようにしています。
鍵を保護する
アプリ署名鍵とキーストアの管理と保護を自分で行う(Play アプリ署名にオプトインしない)場合、アプリ署名鍵の保護は自分にとってもユーザーにとっても非常に重要です。別の人に鍵の使用を許可したり、第三者が見つけて使用できるような安全ではない場所にキーストアとパスワードを置いたりすると、作成者本人であるという保証がなくなり、ユーザーの信頼を失います。
第三者があなたの知らないうちに、または許可なくアプリ署名鍵を取得できてしまった場合、その第三者が本物のアプリを不正に置き換えたり破損させたりするアプリに署名し、配布するおそれがあります。また、あなたの ID で他のアプリやシステム自体を攻撃したり、ユーザーデータを破損させたり盗んだりするアプリに署名して配布する可能性もあります。
秘密鍵は、アプリの今後のバージョンすべてに署名するために必要です。鍵を紛失したり間違った場所に保管したりすると、既存のアプリのアップデートを公開できなくなります。以前に生成した鍵を再生成することはできません。
デベロッパーとしてのあなたの評判は、アプリ署名鍵を期限切れになるまで常に適切に保護することにかかっています。次に、鍵を安全に保つためのヒントを示します。
- キーストアと鍵に対して安全なパスワードを選択します。
- 秘密鍵を他人に与えたり貸したりせず、キーストアと鍵のパスワードを権限のない人に知られないようにします。
- 秘密鍵が格納されたキーストア ファイルを安全な場所に保管します。
一般に、鍵の生成、使用、保管に関する常識的な注意事項を遵守すれば、鍵の安全は確保されます。
ビルドファイルから署名情報を削除する
署名設定を作成すると、Android Studio がモジュールの build.gradle
ファイルに書式なしテキストで署名情報を追加します。チームで作業していたり、コードをオープンソース化したりする場合、この機密情報をビルドファイルから削除し、第三者が容易にアクセスできないようにする必要があります。そのためには、次のように、機密情報を保存するプロパティ ファイルを個別に作成し、ビルドファイルでそのファイルを参照するようにします。
- 署名設定を作成し、1 つ以上のビルドタイプに適用します。 この手順では、上記のアプリに自動で署名するようビルドプロセスを設定するで説明したように、リリース ビルドタイプの署名設定を 1 つ設定しているものとします。
- プロジェクトのルート ディレクトリ内に
keystore.properties
というファイルを作成します。このファイルには、次に示す署名情報を含める必要があります。storePassword=myStorePassword keyPassword=mykeyPassword keyAlias=myKeyAlias storeFile=myStoreFileLocation
- モジュールの
build.gradle
ファイルのandroid {}
ブロックの前に、keystore.properties
ファイルを読み込むためのコードを追加します。Groovy
... // Create a variable called keystorePropertiesFile, and initialize it to your // keystore.properties file, in the rootProject folder. def keystorePropertiesFile = rootProject.file("keystore.properties") // Initialize a new Properties() object called keystoreProperties. def keystoreProperties = new Properties() // Load your keystore.properties file into the keystoreProperties object. keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android { ... }
Kotlin
... import java.util.Properties import java.io.FileInputStream // Create a variable called keystorePropertiesFile, and initialize it to your // keystore.properties file, in the rootProject folder. val keystorePropertiesFile = rootProject.file("keystore.properties") // Initialize a new Properties() object called keystoreProperties. val keystoreProperties = Properties() // Load your keystore.properties file into the keystoreProperties object. keystoreProperties.load(FileInputStream(keystorePropertiesFile)) android { ... }
注:
keystore.properties
ファイルは別の場所に保存することもできます(たとえば、プロジェクトのルートフォルダではなくモジュール フォルダや、継続的インテグレーション ツールを使用している場合はビルドサーバー上など)。その場合は、実際のkeystore.properties
ファイルの場所を使用してkeystorePropertiesFile
が正しく初期化されるように、上記のコードを変更する必要があります。 keystoreProperties
に保存されたプロパティは、構文keystoreProperties['propertyName']
を使用して参照できます。keystoreProperties
に保存された署名情報を、この構文を使用して参照するように、モジュールのbuild.gradle
ファイル内にあるsigningConfigs
ブロックを変更します。Groovy
android { signingConfigs { config { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } ... }
Kotlin
android { signingConfigs { getByName("config") { keyAlias = keystoreProperties["keyAlias"] keyPassword = keystoreProperties["keyPassword"] storeFile = file(keystoreProperties["storeFile"]) storePassword = keystoreProperties["storePassword"] } } ... }
- [Build Variants] ツール ウィンドウを開き、リリース ビルドタイプが選択されていることを確認します。
- [Build] > [Build Bundle(s) / APK(s)] の下のオプションを選択して、リリースビルドの APK または App Bundle のいずれかをビルドします。
モジュールの
build/outputs/
ディレクトリにビルドが出力されていることを確認します。
これでビルドファイルに機密情報が含まれなくなったため、ビルドファイルをソース コントロールに含めたり、共有のコードベースにアップロードしたりできます。必ず keystore.properties
ファイルのセキュリティを確保し、ソース コントロール システムから削除することなども検討してください。