Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Androidの署名について(releaseバリアントでビルドする)

More than 1 year has passed since last update.

Androidの署名の仕組みについて調べたことをまとめます。
ローカルでreleaseバリアントをビルドするところまでで、Play Storeへのリリースまでは扱いません。

内容は基本的に公式ドキュメントのまとめです。
https://developer.android.com/studio/publish/app-signing?hl=ja

Android Studioのバージョンは3.2です。

署名の意味

公開キー証明書(電子証明書)には、公開キーおよび、キーの所有者を特定するメタデータ情報が含まれている。
APKに署名すると、公開キー証明書がAPKにアタッチされる。公開キー証明書は指紋の役割を果たすため、以降のAPKのアップデートが元の作成者からリリースされたことが確認できる。

デバッグ用証明書

Android Studioでアプリを実行すると、Android Studioがデバッグ用証明書を生成し、自動でAPKに署名する。
デバッグ用証明書と証明書作成に使用された秘密キーは以下に保存されている。

~/.android/debug.keystore

リリース用証明書の作成と、自動で署名してアプリを実行する方法

releaseバリアントでアプリを起動しようとすると、以下のエラーが表示される。

image.png

Error: The apk for your currently selected variant (app-release.apk) is not signed. Please specify a signing configuration for this variant (release).

これは、releaseバリアントに署名設定がされていないために起こるエラーである。

なお、debugバリアントは特別で、Android Studioによって自動で署名が行われるようになっていて、署名設定の編集もできない。

Android Studio はデバック用署名情報を署名の設定に自動的に保存するため、デバッグのたびに入力する必要はありません。...デバッグ用署名の設定を直接編集することはできません

キーストアの生成

署名に必要なキーストアの生成は、Build > Generate Signed Bundle / APKメニューから行う。

APKを選択して次へ。
image.png

Create new...をクリック。
image.png

キーストアの情報を入力する。

image.png

  • Key store path: キーストアの保存場所を指定する。あんまりよくわかってないが、ファイル拡張子はjksにすると良さそう。
  • Password: キーストアのパスワード。署名設定時に必要になる。キーストアの中身を確認する際にも使用する。
  • Key > Alias: キーの名前。署名設定時に必要になる。
  • Key > Password: キーのパスワード。署名設定時に必要になる。
  • Key > Validity (years): デフォルトのままにしておいた。
  • Key > Certificate: どれか一つ入力が必要なので、名前だけ入れておく。

入力したらOKをクリックする。

これでキーストアが作成されたので、Cancelをクリックしてウィザードを終了する。

image.png

キーストアの中身は以下のコマンドで確認できる。
キーストアのパスワードを聞かれるので、先程設定したものを入力する。

$ keytool -v -list -keystore ~/Desktop/android.jks
キーストアのパスワードを入力してください:
キーストアのタイプ: JKS
キーストア・プロバイダ: SUN

キーストアには1エントリが含まれます

別名: key0
作成日: Dec 11, 2018
...

releaseバリアントの署名設定

releaseバリアントに署名設定を行う。
File > Project StructureメニューのSigningタブで新しい署名設定を作成する。
先程作成したキーストアの情報に合わせる。
Key PasswordStore Passwordの位置がさっきの画面と逆なので注意(ここで少しハマった...)。

image.png

Build Typesタブでreleaseを選択し、Signing Configに先程作成した署名設定(ここではconfig)を指定する。

image.png

ここまでできたら、Build Variantsウィンドウでreleaseバリアントを指定してアプリを実行できる。

image.png

署名設定は、build.gradleファイルに反映されているのでわかりやすい(パスワードが丸見えなので、環境変数化するとか必要)。

android {
    signingConfigs {
        // 署名設定
        config {
            keyAlias 'key0'
            keyPassword 'S853OEW2'
            storeFile file('/Users/user/Desktop/android.jks')
            storePassword 'zsAU2hbV'
        }
    }
    ...
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config  // 署名設定
        }
    }
}
takehilo
iOSアプリ開発エンジニア note: https://note.mu/takehilo 個人開発アプリ: https://apple.co/2S9HRR4
uzabase
企業活動の意思決定を支える情報インフラの提供
https://www.uzabase.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away