Help us understand the problem. What is going on with this article?

Android Studio 2.3ではAPK作成時にSignature Versionsを選ぶ必要がある

More than 3 years have passed since last update.

概要

AndroidStudio2.3からGenerate Signed APKする際にSignature Versionsを選ぶ項目が追加されていました。
signature.png
選択していないと
「Please select at least one of the signature versions to use」
と怒られる。
signature_err.png

Signature Versionsについて

Android7.0から新しい署名のスキームが導入され、アプリのインストール時間を高速化したり、APKファイルに無許可の変更が行われないようにしたりと、セキュリティ面が強化されました。
従来のスキーム(JAR署名)をv1、新たなスキームをv2と呼びます。
https://source.android.com/security/apksigning/v2
https://developer.android.com/about/versions/nougat/android-7.0.html#apk_signature_v2

結局どっちを選択したら良いの?

基本的に両方チェックが推奨のようです。
両方チェックしていてもAndroid7.0以降ではインストール時に優先的にv2が検証されます。
Android7.0以前では、v2署名は無視されてv1のみ検証が行われるので、最低でもv1にチェックが入っていないとそもそもインストールに失敗してしまいます。
signflow.png

https://source.android.com/security/apksigning/v2#verification
また注意点として、v2で署名した後にapkに変更を加えると署名が無効になるようなので、zipalign などを後からapkにかけてはいけません。

実はAndroidStudio2.2の頃からv1+v2で署名していた

AndroidStudio2.3から署名バージョンを選択できるようになっただけで、
実は、2.2でもデフォルトでv1+v2で署名されていました。
2.3からは、v2を使いたくない際など明示的にbuild.gradleにv2SigningEnabled falseと書かなくても良くなったということのようです。

apksignerで署名されているバージョンを確認できる

以下のようにして、既存のapkファイルにどのバージョンの署名が使われているか確認できます。

apksigner verify -v app-release.apk

apksigner.png
「apksigner」はAndroidSDK内の build-tools/XX.X.X にあるのでパスを通すと使えます。
export PATH=$PATH:~/Library/Android/sdk/build-tools/25.0.3

まとめ

v2利用に問題がない限りは両方チェックするのが無難。
知らずにv2だけチェックしたりするとminSDKVersionと不整合が生じてPlayストアに弾かれる場合があります。

ntsk
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