概要
AndroidStudio2.3からGenerate Signed APKする際にSignature Versionsを選ぶ項目が追加されていました。
選択していないと
「Please select at least one of the signature versions to use」
と怒られる。
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にチェックが入っていないとそもそもインストールに失敗してしまいます。
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」はAndroidSDK内の build-tools/XX.X.X にあるのでパスを通すと使えます。
export PATH=$PATH:~/Library/Android/sdk/build-tools/25.0.3
まとめ
v2利用に問題がない限りは両方チェックするのが無難。
知らずにv2だけチェックしたりするとminSDKVersionと不整合が生じてPlayストアに弾かれる場合があります。