🤖

Android の署名の運用

2024/11/01に公開
  • 署名のフィンガープリント等が必要なケース(例: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