Google PlayへAABをアップロードした際、次のようなエラーが表示されることがあります。
Your Android App Bundle is signed with the wrong key.
The app bundle must be signed with the same certificates as the previous version.
原因を理解するには、Play App Signingで使われる2種類の鍵を区別する必要があります。
Play App Signingの基本
アップロード鍵
開発者がGoogle Playへ送るAABへ署名する鍵です。
Google Playは、アップロードされた成果物が正しい開発者から送られたかを確認します。
アプリ署名鍵
Google Playがユーザーへ配信するAPKを署名する鍵です。
更新版は、端末に入っているアプリと同じアプリ署名鍵で署名される必要があります。
開発者
AABをアップロード鍵で署名
↓
Google Play
確認・最適化APK生成
↓
アプリ署名鍵で配信APKを署名
↓
ユーザー端末
署名エラーの主な原因
別のkeystoreでビルドした
PC移行、CI導入、プロジェクト作り直しなどで、新しいkeystoreを生成してしまうケースです。
既存アプリの更新では、登録済みのアップロード証明書に対応する鍵を使います。
debug鍵で署名した
Android Studioのdebugビルドは通常、debug keystoreで署名されます。Google Playへ出すAABはrelease設定で作成してください。
./gradlew bundleRelease
Flutter:
flutter build appbundle --release
CIの署名設定が違う
ローカルでは成功し、CIだけ失敗する場合は次を確認します。
- keystoreファイル
- key alias
- store password
- key password
- Base64復元先
- build variant
- 環境変数の改行や引用符
別アプリの鍵を使った
複数アプリを同じPCで管理している場合、別プロジェクトのkeystoreやaliasを指定していることがあります。
証明書フィンガープリントを確認する
keystore:
keytool -list -v \
-keystore upload-keystore.jks \
-alias upload
AAB:
jarsigner -verify -verbose -certs app-release.aab
Play Consoleのアプリ署名・整合性に関する画面で、アップロード鍵証明書のSHA-1やSHA-256と比較します。
SHA-1の登録先を混同しない
Googleログインや一部APIでは、アプリ署名鍵のSHAが必要です。
| 用途 | 主に確認する証明書 |
|---|---|
| AABアップロードの認証 | アップロード鍵 |
| Google Playから配信されるAPK | アプリ署名鍵 |
| ローカルdebug | debug鍵 |
| ローカルrelease配布 | release鍵 |
Google Play版だけログインできない場合は、Play Consoleに表示されるアプリ署名鍵のSHAをFirebaseへ追加します。
アップロード鍵を紛失した場合
Play App Signingを利用しているアプリでは、アカウント権限とPlay Consoleの案内に従い、アップロード鍵のリセットを申請できる場合があります。
一般的な流れ:
- 新しいアップロード鍵を安全に作成
- 公開証明書をエクスポート
- Play Consoleからリセット手続きを行う
- 承認・有効化を待つ
- CIとローカルの署名設定を更新
画面や必要手順は変更されることがあるため、Play Consoleの最新案内を優先してください。
新しい鍵の作成例
keytool -genkeypair -v \
-keystore new-upload-key.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias upload
証明書の出力例:
keytool -export -rfc \
-keystore new-upload-key.jks \
-alias upload \
-file upload_certificate.pem
パスワードや秘密鍵ファイルをGitへコミットしないでください。
アプリ署名鍵を変更したい場合
アップロード鍵のリセットと、アプリ署名鍵のアップグレード・変更は別の手続きです。
アプリ署名鍵は端末上の更新互換性に関わるため、単に新しいkeystoreを作って置き換えることはできません。Play Consoleが提供する対象条件と手順を確認します。
keystoreの安全な管理
- 暗号化したバックアップを複数保管
- パスワードをパスワードマネージャーで管理
- aliasを記録
- アプリごとの鍵対応表を作る
- CIではシークレットを利用
- ログへBase64やパスワードを出さない
- 退職・外注終了時にアクセス権を整理
管理表例:
| アプリ | package | upload alias | 保管先 | Play App Signing |
|---|---|---|---|---|
| App A | com.example.a | app-a-upload | Vault A | 有効 |
秘密値そのものを表へ記載しないでください。
エラー時の確認順
- 対象Play Consoleアプリが正しいか
- AABのapplicationIdが一致するか
- releaseビルドか
- 使用keystoreとalias
- AABの署名証明書
- Play Consoleのアップロード鍵証明書
- CIとローカルの設定差
- 鍵リセットが必要か
やってはいけないこと
- エラーのたびに新しいkeystoreを作る
- 署名設定を削除して未署名AABを送る
- 秘密鍵を公開リポジトリへ置く
- アプリ署名鍵とアップロード鍵を同じものと決めつける
- Googleログイン用SHAへupload鍵だけ登録して完了と考える
まとめ
Play App Signingでは、次を区別してください。
アップロード鍵
= 開発者がGoogle PlayへAABを送るための鍵
アプリ署名鍵
= Google Playがユーザー配信APKへ署名する鍵
署名エラーでは、AABの証明書とPlay Consoleのアップロード鍵証明書を比較します。
Google Play版だけFirebase認証が失敗する場合は、Google Play版だけGoogleログインできない原因を確認してください。
一次情報
公式参考資料
Google PlayやFirebaseの画面・要件は変更される場合があります。公開作業の前に、リンク先の最新情報も確認してください。