🤖
Android の署名の運用
- 署名のフィンガープリント等が必要なケース(例:Firebase Auth、Google Map)がわりとある
- 新しい開発メンバー参画時でも、都度 Firabase 等へのフィンガープリントの登録が必要ないようにしたい
- 署名やパスワードをできるだけ楽に管理したい
現実解
- Google Play App Signing アップロード署名を apk ビルドでも aab ビルドでも利用する
- Firebase 等へは、この署名とアプリ署名の2つのフィンガープリントのみを登録
- 面倒なのでデバッグ署名は利用せずアップロード署名で統一
- リリースビルドした apk もアップロード署名されたものとなるが、動作確認の用途であるしよしとする
- 端末でこの動作確認用と Google Play で本配信したものが鍵が異なるので、上書きインストール時にエラーにはなる
- アップロード署名の keystore ファイルとパスワード類はリポジトリに保管し Gradle で署名するようにする
- public でないリポジトリである前提
- Google Play 上でアップロード署名は最悪、差し替えることができる
-
アプリ署名のパスワード類はリポジトリにコミットはしない(keystore のコミットは許容してもよいと思う)アプリ署名さえ秘匿にしておけば、既存のリリースに悪さはできない- そもそも利用する用途がなさそう
android {
// ...
signingConfigs {
create("upload") {
storeFile = rootProject.file("keystore/upload.keystore")
storePassword = "<パスワード>"
keyAlias = "<アイリアス名>"
keyPassword = "<パスワード>"
}
}
// ...
buildTypes {
// defaultConfig で signingConfig を指定しても debug の場合はそれが適用されないのでここに明示的に記載
getByName("debug") {
signingConfig = signingConfigs.getByName("upload")
}
getByName("release") {
signingConfig = signingConfigs.getByName("upload")
// ...
}
}
おまけ:フィンガープリントの確認
キーストアファイル
$ keytool -v -list -keystore <キーストアファイルのパス>
apk ファイル
$ ~/Library/Android/sdk/build-tools/34.0.0/apksigner verify --print-certs -v <apk ファイルのパス>
Discussion