AndroidアプリのPlay Console の署名鍵(SHA-1)で苦しむ

署名鍵SHA-1 フィンガープリントの設定値についてが不一致

Flutter で作ったアプリを Google Play Console に公開する作業をしたのですが、想像以上に大変でした。後で自分で読み返せるように、ここに経緯を残しておきます。

目次

署名まわりでつまずく

最初の大きな壁は アプリ署名(SHA-1) でした。
Google Play Console にアップロードするためには keystore(.jks ファイル)を使ってアプリに署名しなければなりません。

ただ、この keystore を読み込む設定がどうしても上手くいかず、android/app/build.gradle.kts を何度も書き直す羽目に…。
何十回どころではなく、文字通り「何百回」と言っていいほど修正とビルドを繰り返しました。

それでも Gradle 側からは「署名情報が null」と言われたり、正しい JKS を android/ 直下に置いているのに読み取ってくれない、といった問題に悩まされました。

keytool と SHA-1 の確認

途中で keytool を使って JKS 内の証明書情報を確認。
その結果出てきた SHA-1 が Google Play Console 側で求めていた値と一致していることがわかり、ようやく道が開けました。

AAB のビルドとアップロード

ようやく署名が通り、./gradlew bundleRelease で app-release.aab が生成されました。
今度はそれを Google Play Console にアップロード。

なんとか審査へ

最終的に Google Play Console でエラーが消え、アプリを「審査中」に持ち込むことができました。
たどり着くまでに膨大な試行錯誤がありましたが、ようやく「公開までの入り口」に立てたという感覚です。

今回学んだこと
• keystore は正しい場所に置いても、Gradle 側の設定を間違えると認識してくれない
• android/app/build.gradle.kts の設定はシビアで、ほんの一行違うだけで署名が無効になる
• pubspec.yaml のバージョン番号(1.1.1+9 → 1.1.2+10 など)は必ず更新が必要
• エラーにあきらめず何度も試すしかない

まとめ

keystore 設定

• android/ 直下に guitarnote.jks を配置。
• android/key.properties に以下を記述。
• android/app/build.gradle.kts にて signingConfigs を設定。


XXXXXXの部分・・最終的には以下のように直接storePasswordにして安定。

signingConfigs {
    create("upload") {
        val ks = file("/Users/.../_guitar_note_26cards/android/guitarnote.jks")
        println(">>> Using keystore: ${ks.absolutePath} exists=${ks.exists()}")

        storeFile = ks
        storePassword = "XXXXXX"
        keyAlias = "key0"
        keyPassword = "XXXXXX"
    }
}
•   署名が反映されているか確認するために ./gradlew :app:signingReport を実行。

ここで出力された SHA-1 と keytool で確認した値が一致していることを確認。

下記が覚えたコマンドです
つまりこのコマンドは

✅ keystore が壊れていないか
✅ どの SHA-1 を使えばよいか
✅ Google Play / Firebase に登録する fingerprint が正しいか

を確認するために使う「最後のチェックツール」ですね。

用途
• keystore 内の 証明書情報(Fingerprint, 有効期限, 発行者など) を確認する。
• 特に重要なのは SHA-1 / SHA-256 Fingerprint。
• Firebase / Google Play Console に登録する時に必要。
• apksigner で出した値と突き合わせて「正しく署名されているか」を確認できる。

ポイント
• -alias には key.properties に書いた keyAlias(例: key0)を指定。
• パスワード入力を求められるので、storePassword を入力する。
• SHA1 の値が Google Play Console や Firebase コンソールに登録したものと一致すれば OK。

AAB 作成:

cd android
./gradlew clean
./gradlew :app:bundleRelease --no-configuration-cache --rerun-tasks

出力:
android/app/build/outputs/bundle/release/app-release.aab
• 署名確認:

$ANDROID_HOME/build-tools/*/apksigner verify --print-certs \
  app/build/outputs/bundle/release/app-release.aab

学び
1. keystore のパス指定は相対ではなく絶対パスで安定。
2. signingConfigs の設定は release ビルドで必ず適用する。
3. signingReport で SHA-1 を確認してから Google Play Console に登録すると混乱が減る。
4. pubspec.yaml の versionCode/Name はリリースごとに更新が必要。
5. targetSdkVersion は最新に追従すること。



目次