「署名鍵が違う」とビルドがエラーになってしまった時の対処方法について(Flutter/MacOS)
エラーメッセージ:
Android App Bundle が誤った鍵で署名されています。App Bundle を正しい署名鍵で署名して、もう一度お試しください。App Bundle はフィンガープリント「 SHA1: 40:55:7C:… (例)」の証明書で署名される必要がありますが、アップロードした App Bundle の署名に使われている証明書のフィンガープリントは「 SHA1: F9:C9:6A:…(例)」
原因は、前回 Google Play Console に登録した“アプリ署名鍵”と、今回ビルドで使った鍵が違うことです。
次の順で切り分け&修正します。
まずは、ビルドされた .aab がどの鍵で署名されているかを確認します。
keytool -printcert -jarfile build/app/outputs/bundle/release/app-release.aab | grep -i SHA1
Windows(PowerShell)の場合
keytool -printcert -jarfile build\app\outputs\bundle\release\app-release.aab | Select-String SHA1
→ エラーに出た F9:C9:6A:…(例) が表示されるはずです。
これが現在あなたが使用している署名鍵です。
Google Play Console が要求しているのは 40:55:7C:…(例) の指紋です。
どの keystore を使っていたかわからない場合、以下の検索を行います。
find ~ -name "*.jks"
find ~ -name "*.keystore"
例として次のようなファイルが見つかる場合があります:
/Users/you/.android/debug.keystore
/Users/you/AndroidStudioProjects/.../my-release-key.keystore
/Users/you/AndroidStudioProjects/keystores/upload-keystore.jks
見つかった keystore に対して以下を実行:
コマンド例(alias:key0の場合)
keytool -list -v -keystore /path/to/keystore.jks -alias key0
Windowsの場合
keytool -list -v -keystore C:\path\to\keystore.jks -alias key0
alias がわからない場合は、よくある名前を順に試します:
key0uploadreleasemy-key-aliasandroiddebugkey(debug.keystore の場合)🔑 alias(エイリアス)とは?
- keystore(.jks ファイル)の中には「鍵(Key)」が入っています。
- その鍵を区別するために付ける名前が alias(エイリアス) です。
- keystore には複数の鍵を入れることもできますが、普通は 1つの鍵だけを入れて使います。
パスワードを入力すると SHA-1 が表示されますので、Play Console が要求する 「SHA1: 40:55:7C:… (例)」と一致するか確認します。
🔑 パスワード(storePassword)
- keystore(.jks ファイル)作成時に自分で設定したものです。
- パスワードが不明でkeystoreが開けない場合は、署名鍵が見つからない場合と同様に 4.アップロード鍵のリセット に進みます。
Play Console が要求している SHA1の keystore/alias と一致して特定できた場合は、android/app/build.gradle に設定されている signingConfig を確認します。
signingConfigs {
release {
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
}
}
android/key.properties に記載されています(無ければ新規作成)。storeFile=/Users/you/AndroidStudioProjects/keystores/upload-keystore.jks
storePassword=*****
keyAlias=upload
keyPassword=*****
ビルドやり直し → 署名の SHA-1 を .aab から確認
flutter clean
flutter pub get
flutter build appbundle --release
keytool -printcert -jarfile build/app/outputs/bundle/release/app-release.aab | grep -i SHA1
→ Play Console の要求 SHA1 と一致することを確認してからアップロードします
正しい鍵が見つからない場合、Play App Signing を有効にしている(デフォルトで有効)なら、
配布に使う本番鍵は Google が保持しており、あなたは“アップロード鍵”だけリセットできます。
keytool -genkeypair \
-alias upload \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-keystore upload-keystore.jks
例:
/Users/you/AndroidStudioProjects/keystores/upload-keystore.jks
keytool -export -rfc \
-keystore upload-keystore.jks \
-alias upload \
-file upload_certificate.pem
android/key.properties を新しい鍵に合わせて修正:
storeFile=/Users/you/AndroidStudioProjects/keystores/upload-keystore.jks
storePassword=*****
keyAlias=upload
keyPassword=*****
flutter clean
flutter pub get
flutter build appbundle --release
生成された .aab が、新しい SHA-1 になっていることを確認:
keytool -printcert -jarfile build/app/outputs/bundle/release/app-release.aab | grep -i SHA1
→ Google Play Console の「アップロード鍵」に登録した SHA-1 と一致すればOK。