Skip to content

Most visited

Recently visited

navigation

アプリに署名する

Android では、すべての APK はインストール前に証明書を使用してデジタル署名されている必要があります。このドキュメントでは、証明書の作成と保存、ビルド設定ごとに異なる証明書を使用して署名する、APK に自動的に署名するようビルドプロセスを設定するなど、Android Studio を使用して APK に署名する方法を説明します。

証明書とキーストア

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

APK に署名すると、署名ツールは公開鍵証明書を APK に添付します。公開鍵証明書は APK を所有者および対応する秘密鍵に一意に関連付ける「指紋」として機能します。これにより、Android は以降の APK のアップデートが本物で、元の作成者からリリースされたことを確認できます。

キーストアは 1 つ以上の秘密鍵を含むバイナリ ファイルです。Android Studio を使用してリリースする APK に署名するときは、新しいキーストアと秘密鍵を生成するか、すでに所有しているキーストアと秘密鍵を使用するかを選択できます。キーストアには強力なパスワードを使用する必要があり、キーストアに保存する各秘密鍵にもそれぞれ異なる強力なパスワードを選ぶ必要があります。キーストアは安全な場所に保管する必要があります。以下の秘密鍵を保護するをご覧ください。

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

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

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

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

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

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

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

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

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

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

リリースビルドに署名する

Android Studio を使用して、1 つずつ、または同時に複数のビルド バリアントを対象に署名済み APK を手動で生成できます。手動で APK に署名する代わりに、ビルドプロセスで自動的に署名を処理するよう Gradle ビルドを設定することもできます。このセクションでは、手動の署名プロセスについて説明します。ビルドプロセスに署名を含める方法については、APK に自動で署名するようビルドビルドプロセスを設定するをご覧ください。

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

  1. メニューバーで、[Build] > [Generate Signed APK] をクリックします。
  2. プルダウンでリリースするモジュールを選択し、[Next] をクリックします。
  3. キーストアがすでにある場合は、ステップ 5 に進みます。新しいキーストアを作成する場合は、[Create new] をクリックします。

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

    図1. Android Studio で新しいキーストアを作成する

    キーストア

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

    キー

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

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

  5. [Generate Signed APK Wizard] ウィンドウで、キーストアと秘密鍵を選択して両方のパスワードを入力します(前回の手順でキーストアを作成した場合は、このフィールドにすでに入力されています)。[Next] をクリックします。

    図 2. Android Studio で秘密鍵を選択する

  6. 次のウィンドウで、署名済み APK の保存先を選択し、ビルドタイプを選択して(該当する場合)、[Finish] をクリックします。

    図 3. 選択したプロダクト フレーバーの署名済み APK を生成する

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

このプロセスが完了すると、上記の手順で選択した保存先フォルダに署名済み APK が作成されます。これで、Google Play Store などのアプリのマーケット プレイスまたは任意の仕組みを使って署名済み APK を配布できます。Google Play Store に署名済み APK を公開する方法については、公開を開始するをご覧ください。その他の配布オプションについては、その他の配布方法をご覧ください。

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

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

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

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

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

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

    図 5. Android Studio で署名設定を選択する

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

これで、Android Studio を使用してリリース ビルドタイプをビルドするたびに、IDE は指定した署名設定を使用して自動的に APK に署名するようになります。署名済み APK は、ビルドしたモジュールのプロジェクト ディレクトリの build/outputs/apk/ フォルダにあります。

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

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

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

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

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

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

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

    追加のプロダクト フレーバーの設定を繰り返します。

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

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

Android Wear アプリに署名する

Android Wear APK を公開する場合、ユーザーはウェアラブル端末上で直接 APK を閲覧してインストールできないため、ウェアラブル APK をハンドヘルド APK 内にパッケージ化します。両方の APK に署名が必要です。Android Wear APK のパッケージ化と署名の詳細については、ウェアラブル アプリのパッケージ化をご覧ください。

署名の考慮事項

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

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

アプリを Google Play で公開する場合、APK への署名に使用するキーの有効期限は 2033 年 10 月 22 日以降にする必要があります。Google Play では、新しいバージョンが使用可能になったときにユーザーがアプリをシームレスにアップグレードできるよう、この要件を設けています。

秘密鍵を保護する

秘密鍵のセキュリティを維持することは、デベロッパーとユーザーの双方にとって非常に重要です。別の人にキーの使用を許可したり、キーストアとパスワードを第三者が見つけて使用できるような安全ではない場所に置いたりすると、作成者本人であるという保証がなくなり、ユーザーの信頼を失います。

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

秘密鍵は、今後のアプリのバージョンすべてに署名するために必要です。キーをなくしたり不適切な場所に置いたりすると、既存のアプリのアップデートを公開できなくなります。以前に生成したキーを再生成することはできません。

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

一般的に、キーを生成、使用、格納する際の常識的な注意事項を遵守すれば、キーは安全です。

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

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

  1. 署名設定を作成し、1 つ以上のビルドタイプに適用します。この手順では、上記の APK に自動で署名するようビルドプロセスを設定するで説明したように、リリース ビルドタイプの署名設定を 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['propertyName'] を使用して、keystoreProperties に保存されたプロパティを参照できます。この構文を使用して、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 APK] をクリックしてリリース ビルドをビルドし、署名済み APK がモジュールの build/outputs/apk/ ディレクトリに作成されたことを確認します。

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

アプリに手動で署名する

アプリの署名に Android Studio は必要ありません。Android SDK と JDK の標準的なツールを使用してコマンドラインからアプリに署名できます。コマンドラインからリリースモードでアプリに署名するには、次の手順を実行します。

  1. keytool を使用して秘密鍵を生成します。次に例を示します。

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

    この例では、キーストアとキーのパスワードを入力し、鍵の識別名フィールドを指定するよう求められます。次に、キーストアが my-release-key.jks という名前のファイルとして生成されます。キーストアには、10,000 日間有効なキーが 1 つ含まれています。

  2. アプリをリリースモードでコンパイルし、未署名で最適化されていない APK を取得します。

  3. zipalign を使用して、未署名の APK を最適化します。

    $ zipalign -v -p 4 my-app-unaligned.apk my-app.apk
    

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

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

    $ apksigner sign --ks my-release-key.jks my-app.apk
    

    この例では、1 つのキーストア ファイル my-release-key.jks に保存された秘密鍵と証明書を使用してアプリ my-app.apk に署名します。

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

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

    $ apksigner verify my-app.apk
    
This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.