Register now for Android Dev Summit 2019!

アプリの署名

Android では、すべての APK はインストール前に証明書を使用してデジタル署名されている必要があります。 また、Android アプリバンドルを Play Console にアップロードする場合にも、署名しておく必要があります。

このドキュメントでは、証明書の作成と保存、ビルド設定ごとに異なる証明書を使用して署名すること、APK に自動的に署名するためのビルドプロセス設定など、Android Studio を使用して APK やアプリバンドルに署名する方法を説明します。

証明書とキーストア

電子証明書または ID 証明書とも呼ばれる公開鍵証明書には、公開鍵 / 秘密鍵のペアで構成される公開鍵のほか、鍵の所有者を特定するその他のメタデータ(名前と場所など)が含まれています。 証明書の所有者は、対応する秘密鍵も所有しています。

APK に署名すると、署名ツールにより公開鍵証明書が APK にアタッチされます。アプリバンドルに署名した場合も同様です。 公開鍵証明書は、APK またはアプリバンドルを所有者および対応する秘密鍵に一意に関連付ける「指紋」として機能します。 これにより、Android は、以降のアプリのアップデートが正規のものであり、元の作成者からリリースされたことを確認します。 この証明書の作成に使用する鍵は、アプリ署名鍵と呼ばれます。

キーストアは 1 つ以上の秘密鍵を含むバイナリ ファイルです。

ユーザーが新しいバージョンをアプリのアップデートとしてインストールできるようにするには、すべてのアプリが使用期間全体を通じて同じ証明書を使用する必要があります。 アプリの使用期間全体を通じて同じ証明書を使用するメリットについては、以下の署名に関する考慮事項を ご覧ください。

デバッグビルドに署名する

IDE からプロジェクトを実行またはデバッグすると、Android Studio は、Android SDK ツールで生成されたデバッグ用証明書を使用して自動的にアプリに署名します。 Android Studio で初めてプロジェクトを実行またはデバッグすると、IDE はデバッグ キーストアとデバッグ用証明書を $HOME/.android/debug.keystore に自動的に作成し、キーストアと鍵のパスワードを設定します。

デバッグ用証明書はビルドツールで作成され、設計上安全性は確保されていないため、ほとんどのアプリストア(Google Play ストアを含む)ではデバッグ用証明書で署名された APK またはアプリバンドルの公開は受け入れられません。

Android Studio はデバッグ用署名情報を署名の設定に自動的に保存するため、デバッグのたびに入力する必要はありません。 署名の設定は、キーストアの場所、キーストアのパスワード、鍵の名前、鍵のパスワードなど、アプリの署名に必要なすべての情報で構成されたオブジェクトです。 デバッグ用署名の設定を直接編集することはできませんが、リリースビルドに署名する方法を設定することはできます。

デバッグ用アプリのビルドおよび実行方法の詳細については、アプリをビルドして実行するをご覧ください。

デバッグ用証明書の有効期限

デバッグモードでアプリに署名するために使用する自己署名証明書には、作成日から 30 年の有効期限があります。 証明書の期限が切れるとビルドエラーになります。

この問題を解決するには、debug.keystore ファイルを削除します。 ファイルは次の場所にあります。

  • ~/.android/(OS X および Linux)
  • C:\Documents and Settings\<user>\.android\(Windows XP)
  • C:\Users\<user>\.android\(Windows Vista および Windows 7、8、10)

次にデバッグ ビルドタイプをビルドおよび実行するとき、ビルドツールによって新しいキーストアとデバッグ鍵が再生成されます。 ビルドするだけではキーストアとデバッグ鍵は再生成されないため、必ずアプリを実行する必要があります。

鍵を管理する

アプリ署名鍵は、デベロッパーの ID を確認して、シームレスかつ安全なアップデートをユーザーに保証するために使用されるため、鍵の管理とその安全な保管は、デベロッパーとユーザーの両者にとって非常に重要です。 Google Play による App Signing を使用して Google のインフラでアプリ署名鍵を安全に管理および保管するか、独自のキーストアとアプリ署名鍵を管理および保護するかを選択できます。

Google Play による App Signing の使用を選択すると、次のメリットがあります。

  • アプリ署名鍵を紛失することがありません。 アプリ署名鍵を紛失すると、アプリをアップデートできなくなるため、この鍵を紛失しないことは重要です。
  • アプリ署名鍵が侵害されなくなります。 この鍵が侵害されると、悪意のある攻撃者が既存のインストールにアップデートとして悪意のあるバージョンのアプリをデプロイできるようになります。 Play App Signing を使用すると、デベロッパーは、鍵の紛失または侵害が発生した場合にリセットできるアップロード鍵を管理するだけで済みます。 鍵の侵害が発生したとしても、攻撃者が悪意のある行為を実行するには、デベロッパー アカウントにもアクセスする必要があります。

Google Play による App Signing の使用

Google Play による App Signing により、Google はアプリの署名鍵を管理および保護し、APK を配布する際にこれを使用して署名します。 アプリバンドルでは、APK のビルドおよび署名が Google Play ストアで行われるため、アプリバンドルをアップロードする前に Google Play による App Signing に登録する必要があります。

Google Play による App Signing を使用する場合は、アプリ署名鍵アップロード鍵の 2 つの鍵を使用します。 アップロード鍵はデベロッパーが保管し、Google Play ストアにアプリをアップロードする際にこれを使用して署名します。

Google Play による App Signing の使用を選択する場合、Google Play から提供される Play Encrypt Private Key ツールを使用して、アプリ署名鍵をエクスポートおよび暗号化してから、Google のインフラにアップロードします。 次にアップロード鍵を別に作成して Google に登録します。 アプリを公開する準備が整ったら、アップロード鍵を使用してアプリに署名し、Google Play にアップロードします。 図 1 に示すように、Google はアップロード証明書を使用して本人確認を行い、アプリ署名鍵で APK に再署名し、ユーザーに配信します (アプリ署名鍵をまだ生成していない場合は、サインアップ プロセス中に生成できます)。

図 1. Google Play による App Signing を使用したアプリの署名

Google Play による App Signing を使用しているときにアップロード鍵を失くしたり、鍵が侵害されたりした場合は、Google に連絡して古いアップロード鍵を取り消し、新しい鍵を生成してください。 アプリ署名鍵は Google によって保護されているため、アップロード鍵を変更した場合でも、新しいバージョンのアプリを元のアプリのアップデートとして引き続きアップロードできます。

Google Play による App Signing の使用を選択する方法の詳細については、アプリ署名鍵を管理するをご覧ください。

固有の鍵とキーストアを管理する

Google Play による App Signing を使用する代わりに、固有のアプリ署名鍵とキーストアの管理を自分で行うことができます。 固有のアプリ署名鍵とキーストアの管理を自分で行う場合、自身の責任でこの鍵とキーストアを安全に保護する必要があります。 また、Google Play による App Signing に登録せずに、Android アプリバンドルをアップロードすることはできません。

自身の鍵とキーストアを作成する準備ができたら、まず、キーストアのための強固なパスワードと、キーストアに保管する各秘密鍵のための強固なパスワードを作成します。 キーストアは安全な場所に保管する必要があります。 アプリ署名鍵にアクセスできなくなったり、鍵が侵害されたりした場合、Google が代わってアプリ署名鍵を取り出すことができません。デベロッパーは新しいバージョンのアプリを元のアプリのアップデートとしてユーザーにリリースできなくなります。 詳細については、後述の鍵を保護するをご覧ください。

図 2 に示すように、固有のアプリ署名鍵とキーストアを自分で管理する場合は、APK に署名するときに、アプリ署名鍵を使用してローカルで APK に署名し、署名済み APK を直接 Google Play ストアにアップロードして配信します。

図 2. 固有のアプリ署名鍵を自分で管理する場合のアプリへの署名

鍵とキーストアを生成する

アプリの署名もアップロード鍵もない場合は、Android Studio を使用して以下の方法でそれらを生成できます。

  1. メニューバーで、[Build] > [Build] > [Generate Signed Bundle/APK] の順にクリックします。
  2. [Generate Signed Bundle or APK] ダイアログで、[Android App Bundle] または [APK] を選択し、[Next] をクリックします。
  3. [Key store path] のフィールドの下で、[Create new] をクリックします。

  4. 図 3 のように、[New Key Store] ウィンドウで、キーストアと鍵のための次の情報を指定します。

    図 3. Android Studio での新しいキーストアの作成。

    キーストア

    • [Key store path]: キーストアを作成する場所を選択します。
    • [Password]: キーストアの安全なパスワードを作成し、確認します。

    • [Alias]: 鍵を識別する名前を入力します。
    • [Password]: 鍵の安全なパスワードを作成し、確認します。 キーストアのパスワードとは異なるパスワードにする必要があります。
    • [Validity (years)]: 鍵の有効期間を年単位で設定します。 鍵は少なくとも 25 年間は有効であるため、アプリの使用期間全体を通じて同じ鍵を使用してアプリのアップデートに署名できます。
    • [Certificate]: 証明書の所有者に関する情報を入力します。 この情報はアプリには表示されませんが、APK の一部として証明書に含まれます。

    フォームの入力が完了したら、[OK] をクリックします。

  5. 新しい鍵で署名した APK を生成する場合は、リリース用としてアプリに署名するに進みます。鍵とキーストアのみを生成して、APK に署名しない場合は、[Cancel] をクリックします。
  6. Google Play による App Signing を使用する場合は、アプリ署名鍵を管理するに進み、Google Play による App Signing のセットアップの指示に従ってください。

リリース用としてアプリに署名する

鍵とキーストアの管理方法とは無関係に、APK と アプリバンドルのいずれをビルドする場合でも、Android Studio を使用して、アップロード鍵またはアプリ署名鍵のいずれかを使用してアプリに署名できます。

  • 固有のアプリ署名鍵とキーストアの管理と保護を自分で行う場合は、アプリ署名鍵を使用してアプリに署名します。
  • Google Play による App Signing を使用してアプリ署名鍵とキーストアの管理と保護を行う場合は、アップロード鍵を使用してアプリに署名します。

Android Studio でリリース用 APK に署名するには、次の手順を実行します。

  1. [Build] > [Generate Signed Bundle/APK] の順にクリックします。
  2. [Generate Signed Bundle or APK] ダイアログで、[Android App Bundle] または [APK] を選択し、[Next] をクリックします。
  3. プルダウンでモジュールを選択します。
  4. 署名情報が既にある場合は、キーストアと秘密鍵を選択し、両方にパスワードを入力します。 ない場合は、まず鍵とキーストアを生成してから、このステップに戻って操作を完了します。

    注: Google Play による App Signing を使用する場合は、アップロード鍵をここで指定する必要があります。 固有のアプリ署名鍵とキーストアを自分で管理する場合は、アプリ署名鍵を指定する必要があります。 詳細については、上述の鍵を管理するをご覧ください。

    図 4. Android Studio での秘密鍵の選択。

  5. アプリバンドルをビルドしている場合は、Android Studio で [Export encrypted key] の横にあるボックスをオンにすることで、署名鍵を暗号化ファイルとして保存することもできます。 アプリバンドルをアップロードしてダイナミック配信を利用できるようにするには、この暗号化ファイルを Play Console にアップロードして、 に登録する必要があります。 Google Play による App Signing
  6. [Next] をクリックします。
  7. 次のウィンドウで、署名済み APK またはアプリバンドルの保存先を指定し、ビルドタイプを選択後、該当する場合はプロダクト フレーバーを選択して、[Finish] をクリックします。

    図 5. 選択したプロダクト フレーバーでアプリの署名済みバージョンを生成します。

    注: プロジェクトでプロダクト フレーバーを使用している場合、Windows / Linux では Control キー、Mac OSX では Command キーを押しながら複数のプロダクト フレーバーを選択できます。 Android Studio は、選択したプロダクト フレーバーごとに別個の APK またはアプリバンドルを生成します。

Android Studio で署名済みアプリのビルドが終了後、ポップアップ通知の適切なオプションをクリックして、アプリを検索または分析することができます。 署名鍵をエクスポートするオプションを選択していた場合は、図 6 のように、ポップアップの右下隅にあるドロップダウン矢印をクリックしてその鍵を展開し、[Show Exported Key File] をクリックすれば、その署名鍵の場所に即座に移動できます。

図 6. IDE による署名済みアプリバンドルの生成が終了した後、ポップアップのリンクをクリックしてアプリバンドルを分析、検索、またはエクスポートされた署名鍵を検索します。

これで、Google Play ストアなどのアプリのマーケットプレイスまたは任意の仕組みを使って署名済みアプリを配布できます。 Google Play ストアに署名済み APK を公開する方法については、公開を開始するをご覧ください。 その他の配布オプションについて詳しくは、その他の配布方法をご覧ください。

ユーザーがアプリのアップデートを正常にインストールできるようにするには、アプリの使用期間全体を通じて同じ証明書でアプリに署名する必要があります。 このような署名の詳細と、すべてのアプリを同じ鍵で署名するさまざまなメリットについては、以下の署名に関する考慮事項をご覧ください。 秘密鍵とキーストアの保護の詳細については、鍵を保護するをご覧ください。

アプリに自動で署名するようビルドプロセスを設定する

Android Studio で、ビルドプロセス中にアプリのリリース バージョンに自動的に署名するようにプロジェクトを設定できます。そのためには、署名設定を作成し、リリース ビルドタイプにその設定を適用します。 署名設定は、キーストアの場所、キーストアのパスワード、鍵のエイリアス、鍵のパスワードで構成されます。 Android Studio で署名設定を作成してリリース ビルドタイプに適用するには、次の手順を実行します。

  1. [Project] ウィンドウで、アプリを右クリックし、[Open Module Settings] をクリックします。
  2. [Project Structure] ウィンドウの左側のパネルにある [Modules] で、署名するモジュールをクリックします。
  3. [Signing] タブをクリックし、[Add] をクリックします。
  4. キーストア ファイルを選択して、この署名設定の名前を入力し(複数作成する場合があるため)、必要な情報を入力します。

    図 7. 新しい署名設定を作成するためのウィンドウ。

  5. [Build Types] タブをクリックします。
  6. [release] ビルドをクリックします。
  7. [Signing Config] で、作成した署名設定を選択します。

    図 8. Android Studio での署名設定の選択。

  8. [OK] をクリックします。

Android Studio で [Build] > [Build Bundle(s) / APK(s)] の下のオプションを選択すれば、リリース ビルドタイプをビルドするたびに、指定された署名設定を使用して IDE がアプリに自動的に署名するようになりました。 署名済み APK またはアプリバンドルは、ビルドしたモジュールのプロジェクト ディレクトリの build/outputs/ ディレクトリにあります。

署名設定を作成すると、署名情報は Gradle ビルドファイルに書式なしテキストとして保存されます。 チームで作業している場合、またはコードを一般公開して共有する場合は、署名情報を保護する必要があるため、ビルドファイルから署名情報を削除して別の場所に保存します。 署名情報をビルドファイルから削除する方法については、ビルドファイルから署名情報を削除するをご覧ください。 署名情報の保護の詳細については、鍵を保護するをご覧ください。

プロダクト フレーバーごとに異なる署名をする

アプリでプロダクト フレーバーを使用し、フレーバーごとに異なる署名を行う場合、追加の署名設定を作成し、フレーバーごとに指定することができます。

  1. [Project] ウィンドウで、アプリを右クリックし、[Open Module Settings] をクリックします。
  2. [Project Structure] ウィンドウの左側のパネルにある [Modules] で、署名するモジュールをクリックします。
  3. [Signing] タブをクリックし、[Add] をクリックします。
  4. キーストア ファイルを選択して、この署名設定の名前を入力し(複数作成する場合があるため)、必要な情報を入力します。

    図 9. 新しい署名設定を作成するためのウィンドウ。

  5. 必要に応じて、すべての署名設定を作成するまで手順 3 および 4 を繰り返します。
  6. [Flavors] タブをクリックします。
  7. 設定するフレーバーをクリックし、[Signing Config] プルダウン メニューから適切な署名設定を選択します。

    図 10. プロダクト フレーバーごとに署名の設定をする。

    さらにプロダクト フレーバーがある場合、設定を繰り返します。

  8. [OK] をクリックします。

Gradle の構成ファイルで署名設定を指定することもできます。 詳細については、署名設定の設定をご覧ください。

Wear OS アプリに署名する

Wear OS アプリをビルドしている場合、アプリへの署名プロセスは、このページに記載されているプロセスとは異なることがあります。 詳細については、Wear OS アプリのパッケージ化と公開をご覧ください。

署名に関する考慮事項

想定される使用期間全体を通じて、同じ証明書でアプリに署名する必要があります。 その理由は次のとおりです。

  • アプリのアップグレード:アプリのアップデートがインストールされる際に、新しいバージョンの証明書と既存のバージョンの証明書が比較されます。 証明書が一致するとアップデートが許可されます。 異なる証明書を使用して新しいバージョンに署名する場合は、異なるパッケージ名をアプリに割り当てる必要があります。この場合、ユーザーは新しいバージョンを完全に新しいアプリとしてインストールします。
  • アプリのモジュール性:Android では、同じ証明書で署名された APK が同一プロセスで実行されることを許可するため(アプリでこれが要求される場合)、これらは単一のアプリとして処理されます。 この方法では、アプリをモジュールでデプロイでき、ユーザーは各モジュールを個別にアップデートできます。
  • パーミッションによるコードとデータの共有:Android では署名に基づくパーミッションが適用されます。これにより、アプリでは、指定の証明書で署名された別のアプリに機能を公開できます。 同じ証明書で複数の APK に署名し、署名に基づくパーミッション チェックを使用することによって、複数のアプリでコードとデータを安全に共有できます。

アプリのアップグレードをサポートする場合、アプリ署名鍵の有効期間は、そのアプリの想定される使用期間よりも長くなければなりません。 推奨される有効期間は 25 年以上です。 鍵の有効期間が切れると、ユーザーはアプリの新しいバージョンにシームレスにアップグレードできなくなります。

アプリを Google Play で公開する場合、アプリへの署名に使用する鍵の有効期限は 2033 年 10 月 22 日より後でなければなりません。 Google Play では、新しいバージョンが使用可能になったときにユーザーがアプリをシームレスにアップグレードできるようにするために、この要件を設けています。 Google Play による App Signing を使用すれば、Google によって、アプリが正しく署名されていることが保証され、アプリの使用期間を通じてアップデートを受け取ることができます。

鍵を保護する

Google Play による App Signing を使用する代わりに、アプリ署名鍵とキーストアの管理と保護を自分で行う場合、アプリ署名鍵の保護はデベロッパーとユーザーの両者にとって非常に重要です。 別の人に鍵の使用を許可したり、第三者が見つけて使用できるような安全ではない場所にキーストアとパスワードを置いたりすると、作成者本人であるという保証がなくなり、ユーザーの信頼を失います。

注: Google Play による App Signing を使用すると、アプリ署名鍵は Google のインフラで安全に保管されます。 後述のように、アップロード鍵については、自分で引き続き安全に保管する必要があります。 アップロード鍵が侵害された場合は、Google に連絡してこの鍵を取り消し、新しいアップロード鍵を受け取ることができます。

第三者があなたの知らないうちに、または許可なく鍵を取得できてしまった場合、その第三者が本物のアプリを不正に置き換えたり破損させたりするアプリに署名し、配布するおそれがあります。 また、あなたの ID で他のアプリやシステム自体を攻撃したり、ユーザーデータを破損したり盗んだりするアプリに署名して配布する可能性もあります。

秘密鍵は、アプリの今後のバージョンすべてに署名するために必要です。 鍵を紛失したりどこに保管したか分からなくなったりすると、既存のアプリのアップデートを公開できなくなります。 以前に生成した鍵を再生成することはできません。

デベロッパーとしてのあなたの評判は、アプリ署名鍵を期限切れになるまで常に適切に保護することにかかっています。 次に、鍵を安全に保つためのヒントを示します。

  • キーストアと鍵に対して強力なパスワードを選択します。
  • 秘密鍵を他人に与えたり貸したりせず、キーストアと鍵のパスワードを権限のない人に知られないようにします。
  • 秘密鍵を含むキーストア ファイルは安全な場所に保存します。

一般的に、鍵を生成、使用、格納する際の常識的な注意事項を順守すれば、鍵の安全は確保されます。

ビルドファイルから署名情報を削除する

署名設定を作成すると、Android Studio はモジュールの build.gradle ファイルに書式なしテキストとして署名情報を追加します。 チームで作業していたり、コードをオープンソース化したりする場合、この機密情報をビルドファイルから削除し、第三者が容易にアクセスできないようにする必要があります。 そのためには、次のように、機密情報を保存するプロパティ ファイルを個別に作成し、ビルドファイルでそのファイルを参照するようにします。

  1. 署名設定を作成し、1 つ以上のビルドタイプに適用します。 この手順では、上記のアプリに自動で署名するようビルドプロセスを設定するで説明したように、リリース ビルドタイプの署名設定を 1 つ設定しているものとします。
  2. プロジェクトのルート ディレクトリに keystore.properties というファイルを作成します。 このファイルには、次に示す署名情報を含める必要があります。
    storePassword=myStorePassword
    keyPassword=mykeyPassword
    keyAlias=myKeyAlias
    storeFile=myStoreFileLocation
    
  3. モジュールの build.gradle ファイルで、android {} ブロックの前に keystore.properties ファイルを読み込むコードを追加 します。
    ...
    
    // 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 {
        ...
    }
    
    

    注: 別の場所に keystore.properties ファイルを保存することもできます(たとえば、プロジェクトのルート フォルダではなくモジュール フォルダや、継続的インテグレーション ツールを使用している場合はビルドサーバー上など)。 その場合は、実際の keystore.properties ファイルの場所を使用して keystorePropertiesFile が正しく初期化されるように、上記のコードを変更する必要があります。

  4. keystoreProperties に保存されたプロパティを、 構文 keystoreProperties['propertyName'] を使用して参照できます。 この構文を使用して、keystoreProperties に保存された署名情報を参照するように、モジュールの build.gradle ファイルの signingConfigs ブロックを変更します。
    android {
        signingConfigs {
            config {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
        ...
      }
    
  5. [Build Variants] ツール ウィンドウを開き、リリース ビルドタイプが選択されていることを確認します。
  6. [Build] > [Build Bundle(s) / APK(s)] の下のオプションを選択して、リリースビルドの APK または アプリバンドルのいずれかをビルドします。 モジュールの build/outputs/ ディレクトリにビルドが出力されていることを確認します。

これでビルドファイルには機密情報が含まれなくなったため、ビルドファイルをソース コントロールに含めたり、共有のコードベースにアップロードしたりできます。 必ず keystore.properties ファイルのセキュリティを確保し、 ソース コントロール システムからの削除なども検討してください。

コマンドラインからアプリを署名する

アプリの署名に Android Studio は必要ありません。 apksigner(APK)または jarsigner(アプリバンドル)を使用して、コマンドラインからアプリに署名するか、ビルド時にデベロッパーに代わって署名するように Gradle を設定することができます。 どちらの方法でも、keytool を使用して秘密鍵を最初に生成する必要があります。 次に例を示します。

keytool -genkey -v -keystore my-release-key.jks
-keyalg RSA -keysize 2048 -validity 10000 -alias my-alias

注: keytool は、JDK の bin/ ディレクトリ にあります。 Android Studio から JDK を探す場合は、[File] > [Project Structure] を選択してから [SDK Location] をクリックすると、[JDK location] が表示されます。

この例では、キーストアと鍵のパスワードを入力し、鍵の識別名フィールドを指定するよう求められます。 次に my-release-key.jks というファイルとしてキーストアが生成され、現在のディレクトリに保存されます(任意の保存先に移動することができます)。 このキーストアには 10,000 日間有効な鍵が 1 つ含まれます。

この後、署名されていない APK またはアプリバンドルをビルドして手動で署名するか、Gradle を設定してアプリに署名することができます。

コマンドラインから手動でアプリに署名する

まだビルドしていない場合は、コマンドラインからアプリをビルドします

コマンドラインからアプリバンドルに署名する場合には、jarsigner が使用できます。

APK に署名する場合は、以下に説明するように、 zipalignapksigner を使用する必要があります。

  1. Android Studio からコマンドラインを開き、[View] > [Tool Windows] > [Terminal] の順に選択して、まだ署名していない APK があるディレクトリに移動します。
  2. zipalign を使用して、未署名の APK を最適化します。

    zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
    

    zipalign によって、未圧縮のすべてのデータが、ファイルの始まりを基準にして特定のバイト単位で整列されて開始されるようになります。これにより、アプリが使用する RAM の量が削減されます。

  3. apksigner を使用して、秘密鍵で APK に署名します。

    apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
    

    この例では、署名された APK が my-app-release.apk に出力されます。 出力は、単一のキーストア ファイル my-release-key.jks に保管されている秘密鍵と証明書を使用して署名された後に行われます。

    apksigner ツールは、別個の秘密鍵と証明書ファイルを使用した APK ファイルの署名や、複数の署名者を使用した APK の署名など、その他の署名オプションもサポートしています。 詳細については、apksigner のリファレンス をご覧ください。

    注: apksigner ツールを使用するには、リビジョン 24.0.3 以降の Android SDK Build Tools がインストールされている必要があります。 このパッケージは、SDK Manager を使用してアップデートできます。

  4. APK が署名されたことを確認します。

    apksigner verify my-app-release.apk
    

Gradle を設定してアプリに署名する

モジュールレベルの build.gradle ファイルを開き、storeFilestorePasswordkeyAliaskeyPassword のエントリを含む signingConfigs {} ブロックを追加して、そのオブジェクトをビルドタイプの signingConfig プロパティに渡します。

次に例を示します。

android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            // You need to specify either an absolute path or include the
            // keystore file in the same directory as the build.gradle file.
            storeFile file("my-release-key.jks")
            storePassword "password"
            keyAlias "my-alias"
            keyPassword "password"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            ...
        }
    }
}

Gradle タスクを呼び出して、コマンドラインからアプリをビルドすると、デベロッパーに代わり Gradle がアプリに署名(して zipalign を実行)します。

署名鍵でリリースビルドを設定したため、そのビルドタイプでは「インストール」タスクが使用できます。 すべて installRelease タスクにより、エミュレータまたは端末で、リリース APK のビルド、最適化、署名、インストールが可能になります。

秘密鍵で署名されたアプリを配布する準備が整いましたが、最初にアプリを公開する方法の詳細を確認し、Google Play のリリース チェックリストを確認する必要があります。