Rorkで生成したアプリを Google Play Console にアップロードしたとき、「Your Android App Bundle is signed with the wrong key(このAndroid App Bundleは間違った鍵で署名されています)」というエラーで弾かれて、先に進めなくなったことはないでしょうか。ビルドは通っているのに提出だけ失敗するため、原因が掴みづらく、最初の公開でつまずきやすいポイントです。
私自身、2014年から個人開発を続けてきて累計5,000万ダウンロードに届くまでに何本もアプリを出してきましたが、この署名まわりのエラーは新しいビルド環境に移るたびに必ず一度はぶつかります。仕組みを一度理解しておくと、慌てずに切り分けられるようになります。
なぜ「鍵が違う」と言われるのか
Google Play にアプリを出すとき、署名には二種類の鍵が関わります。ここを混同していると、エラーメッセージの意味が読み取れません。
ひとつは アップロード鍵(upload key) です。あなたが手元で AAB(Android App Bundle)に署名するための鍵で、Google Play に「これは確かに私が出したものです」と示すためのものです。
もうひとつは アプリ署名鍵(app signing key) です。実際にユーザーへ配信される APK に Google が付け直す鍵で、Play App Signing が有効な場合は Google 側で安全に保管されます。
「間違った鍵で署名されています」と言われるのは、ほとんどの場合 Google Play に登録済みのアップロード鍵と、今あなたが署名に使った鍵が一致していない ためです。初回登録時の鍵を紛失したり、ビルド環境を変えて新しい鍵で署名してしまったりすると発生します。
まず確認すべきこと
対処に入る前に、今どの鍵で署名されているのかを確かめます。手元の AAB に含まれる証明書の指紋(SHA-256)を取り出して、Google Play Console に登録されている指紋と突き合わせます。
# AAB / APK に含まれる署名証明書を確認する
keytool -printcert -jarfile your-app.aab出力の SHA256: の行に並ぶ指紋を控えておきます。次に Google Play Console を開き、対象アプリの「テストとリリース」→「アプリの署名」を見ると、アップロード鍵証明書 と アプリ署名鍵証明書 の SHA-256 がそれぞれ表示されています。
ここで手元の指紋が アップロード鍵証明書 の値と一致していれば正常です。一致していなければ、別の鍵で署名している状態であり、これがエラーの直接の原因です。
ケース別の対処
原因は「どんなビルド環境を使っているか」で変わります。Rorkで作ったアプリは EAS(Expo Application Services)でビルドするか、ネイティブ書き出ししてローカルで署名するかのどちらかが多いので、その二つを中心に整理します。
ケース1:EAS Build を使っていて鍵が変わってしまった
EAS Build は初回に署名鍵を自動生成し、Expo 側で保管してくれます。便利な反面、eas credentials を操作したときや別アカウント・別プロジェクトでビルドし直したときに、新しい鍵が作られて指紋がずれることがあります。
まず、EAS が今どの鍵を持っているかを確認します。
# Android の署名認証情報を一覧表示する
eas credentials --platform androidメニューから対象のビルドプロファイル(通常は production)を選ぶと、現在の Keystore とその SHA-256 指紋が表示されます。これが Google Play 側のアップロード鍵証明書と一致していれば、その鍵でビルドし直すだけで解決します。
問題は、過去に Google Play へ登録した鍵を EAS が失っているケースです。この場合は、登録済みのアップロード鍵(.jks / .keystore ファイルとパスワード一式)が手元に残っているなら、それを EAS に読み込ませます。
# 既存の keystore を EAS にアップロードして使わせる
eas credentials --platform android
# → Keystore: Set up a new keystore → 既存ファイルを選択 → パスワードを入力手元にも鍵が残っていない場合は、後述の「アップロード鍵を紛失した場合」へ進みます。
ケース2:ローカルで署名していて鍵を取り違えた
ネイティブ書き出しして Android Studio やコマンドラインで署名している場合は、署名設定が参照している keystore ファイルが正しいかを確認します。android/gradle.properties や CI の環境変数で、デバッグ用の鍵や別アプリの鍵をうっかり指していることがよくあります。
# android/gradle.properties — リリース署名に使う鍵を明示する
MYAPP_UPLOAD_STORE_FILE=upload-keystore.jks
MYAPP_UPLOAD_KEY_ALIAS=upload
MYAPP_UPLOAD_STORE_PASSWORD=YOUR_STORE_PASSWORD
MYAPP_UPLOAD_KEY_PASSWORD=YOUR_KEY_PASSWORD指している keystore の指紋は、次のコマンドで確認できます。
# keystore 内の特定エイリアスの指紋を確認する
keytool -list -v -keystore upload-keystore.jks -alias uploadここで出る SHA-256 が Google Play のアップロード鍵証明書と一致するかを必ず突き合わせてください。複数アプリを並行運用していると、別アプリの keystore を共有してしまう取り違えが起きがちです。私も壁紙系と癒し系のアプリを同時に更新していた時期に、片方の鍵でもう片方を署名しかけたことがあります。アプリごとに keystore とエイリアスを明確に分けておくのが安全です。
ケース3:アップロード鍵を紛失した場合
手元にもビルド環境にもアップロード鍵が残っておらず、復元できないときは、Google にアップロード鍵のリセットを依頼します。これは Play App Signing が有効なアプリでのみ可能で、Google が配信用のアプリ署名鍵を保持しているからこそ取れる手段です。
新しいアップロード鍵を作り、その公開鍵証明書(PEM)をリセット申請に添付します。
# 新しいアップロード鍵を生成する
keytool -genkeypair -v -keystore new-upload-keystore.jks \
-alias upload -keyalg RSA -keysize 2048 -validity 9125
# リセット申請に添付する PEM 証明書を書き出す
keytool -export -rfc -keystore new-upload-keystore.jks \
-alias upload -file upload_certificate.pem書き出した upload_certificate.pem を持って、Google Play Console の「アプリの署名」ページから アップロード鍵のリセットをリクエスト します。承認には通常1〜2営業日かかります。承認後は、この新しい鍵で署名したビルドが受け付けられるようになります。
注意したいのは、Play App Signing を使わずに自分でアプリ署名鍵を管理していて、その鍵を失った場合です。このときは同じパッケージ名でのアップデート公開ができなくなり、リセットも効きません。だからこそ、最初に Play App Signing を有効にしておくことを私は強くおすすめします。
同じ失敗を繰り返さないために
このエラーは一度起こすと復旧に手間がかかるので、予防が何より効きます。私が複数アプリを長く運用してきて落ち着いた習慣は、次のようなものです。
アップロード鍵の .jks ファイルとパスワードは、ビルド環境とは別の場所——パスワードマネージャーや暗号化したバックアップ——に必ず保管します。ビルドマシンを買い替えたときに鍵だけ消える、というのが一番多い事故です。
Play App Signing は新規アプリでは原則として有効にします。これで配信用の鍵は Google が保管してくれるため、最悪アップロード鍵を失ってもリセットで復帰できます。
そして、アプリごとに keystore とエイリアス名を分け、一覧をメモに残しておきます。指紋の突き合わせは keytool -printcert -jarfile 一発でできるので、提出前に一度確認する癖をつけるだけで、提出してから弾かれる無駄なやり直しが減ります。
次に新しいビルド環境へ移すときは、まず手元の AAB の指紋を取り、Google Play のアップロード鍵証明書と一致することを確認してから提出してみてください。それだけで、この署名エラーのほとんどは未然に防げます。