Android Studioで署名付きAPKやAndroid App Bundleを作成するときに、「Failed to read key from store」と表示され、Releaseビルドに失敗することがあります。
Failed to read key from store
環境によっては、次のようにKey AliasやKeystoreファイル名を含んだエラーとして表示されます。
Failed to read key release from store "release.jks"
このエラーは、Keystoreファイルは参照できているものの、指定された秘密鍵を正常に取得できない場合に発生することが多く、Key Alias、Key Password、Keystore Password、Keystore形式、署名設定などを確認する必要があります。
Android Gradle Pluginでは、署名設定としてstoreFile、storePassword、keyAlias、keyPasswordを個別に設定します。 :contentReference[oaicite:0]{index=0}
この記事では、「Failed to read key from store」の原因と、keytoolを使ったAlias確認、Key Passwordの切り分け、Gradle署名設定の修正など、実際に問題を解決するための手順を解説します。
- 「Failed to read key from store」とは
- 代表的な発生状況
- 主な原因
- 確認手順1:Keystoreをkeytoolで確認する
- 確認手順2:Aliasだけ確認する
- 解決方法1:正しいKey Aliasを設定する
- 解決方法2:Key Passwordを確認する
- 解決方法3:storePasswordとkeyPasswordを入れ替えていないか確認する
- 解決方法4:正しいKeystoreファイルか確認する
- 解決方法5:GradleのstoreFileを確認する
- 解決方法6:keystore.propertiesを確認する
- 解決方法7:Aliasの大文字・小文字や記号を確認する
- 解決方法8:指定AliasがPrivateKeyEntryか確認する
- 解決方法9:JKS形式として確認する
- 解決方法10:PKCS12形式として確認する
- 解決方法11:GradleでstoreTypeを明示する
- 解決方法12:Key Passwordを変更した履歴がないか確認する
- 解決方法13:現在のKey Passwordが分かる場合は変更する
- 解決方法14:keytoolでAliasを指定して確認する
- 解決方法15:使用しているkeytoolを確認する
- 解決方法16:Javaバージョンを確認する
- 解決方法17:Android StudioのGradle JDKを確認する
- 解決方法18:Gradleのキャッシュだけを原因と決めつけない
- 解決方法19:Cleanして再ビルドする
- 解決方法20:Generate Signed App Bundle or APKで再入力する
- 解決方法21:バックアップKeystoreで確認する
- 解決方法22:Keystoreファイルサイズを確認する
- 解決方法23:CI/CDのSecretを確認する
- 解決方法24:Base64化したKeystoreを復元している場合は破損を確認する
- 「Failed to read key from store」と「Keystore was tampered with」の違い
- 「Failed to read key from store」と「Alias does not exist」の違い
- 「Cannot recover key」が併記される場合
- Key Passwordを忘れた場合
- 新しいKeystoreを作れば直る?
- パスワードをGradleへ直接書く場合の注意
- 最短で原因を特定する手順
- それでも解決しない場合
- まとめ
「Failed to read key from store」とは
AndroidアプリのRelease版を署名するには、Keystore内に保存されている秘密鍵を使用します。
一般的な署名設定では、次の4つの情報が必要です。
storeFile storePassword keyAlias keyPassword
storePasswordはKeystore自体を開くためのパスワードです。
keyAliasはKeystore内のどの鍵を使用するか指定する名前で、keyPasswordはその秘密鍵を取得するためのパスワードです。
Android公式ドキュメントでも、Release署名設定にこれらの値を設定する方法が案内されています。 :contentReference[oaicite:1]{index=1}
ポイント:「Failed to read key from store」は、Keystoreファイルが存在しない場合だけではなく、Keystoreは開けるものの、Aliasや秘密鍵を取得できない場合にも発生します。
代表的な発生状況
- Generate Signed App Bundle or APKを実行したとき
- Releaseビルドを実行したとき
- 別PCへ開発環境を移行したあと
- Keystoreをバックアップから復元したあと
build.gradleやbuild.gradle.ktsを書き換えたあとkeystore.propertiesを編集したあと- Key Aliasを変更したあと
- Keystore PasswordまたはKey Passwordを変更したあと
- JDKを変更したあと
- JKSからPKCS12などへKeystoreを移行したあと
主な原因
1.Key Aliasが間違っている
非常に多い原因です。
たとえばKeystore内の実際のAliasが、
release
なのに、Gradle側で、
keyAlias = "my-release"
と指定している場合、その鍵を取得できません。
2.Key Passwordが間違っている
Keystore自体を開くためのstorePasswordが正しくても、秘密鍵を保護しているkeyPasswordが違えば鍵を読み出せない場合があります。
Oracleのkeytoolドキュメントでも、Key Passwordが指定されていない場合は最初にKeystore Passwordで秘密鍵の取得を試み、それに失敗すればKey Passwordを要求する仕様になっています。 :contentReference[oaicite:2]{index=2}
3.Keystore PasswordとKey Passwordを混同している
storePassword → Keystore自体を開く keyPassword → Aliasに対応する秘密鍵を取得する
この2つは同じ値の場合もありますが、過去に作成したKeystoreでは別々のパスワードになっている場合があります。
4.別のKeystoreファイルを参照している
複数アプリで、
release.jks keystore.jks upload.jks
など似た名前を使用していると、別アプリのKeystoreを誤って指定することがあります。
5.指定したAliasが秘密鍵エントリではない
Keystoreには秘密鍵だけではなく、信頼済み証明書など別種類のエントリも保存できます。
Androidアプリ署名には秘密鍵エントリが必要です。
6.Keystore形式が異なる
JKS、PKCS12などKeystoreには複数の形式があります。
古いプロジェクトを新しいJDKへ移行した場合など、形式を明示すると原因を切り分けられる場合があります。
7.Keystoreファイルが破損している
ファイルコピー失敗、クラウド同期競合、ストレージ障害などでKeystoreそのものが壊れている場合もあります。
8.keystore.propertiesの値が間違っている
Gradleへ直接パスワードを書かず、外部ファイルから読み込んでいる場合は設定値を確認します。
9.CI/CDのSecretが古い
ローカルでは成功するのにGitHub ActionsなどのCI/CDだけ失敗する場合は、Secret側に古いAliasやパスワードが残っている可能性があります。
10.JDKやkeytoolが異なる
複数のJDKがインストールされている場合、Android Studioが使うJDKとターミナルで実行しているkeytoolが異なる場合があります。
確認手順1:Keystoreをkeytoolで確認する
最初に、Keystoreそのものを直接確認します。
keytool -list -v -keystore release.jks
Keystore Passwordを入力し、内容が表示されるか確認してください。
Oracleのkeytoolでは、-listを使用してKeystore内のエントリを一覧表示できます。 :contentReference[oaicite:3]{index=3}
正しく開ける場合は、次のようなAlias情報を確認できます。
Alias name: release
確認手順2:Aliasだけ確認する
詳細情報が不要なら、
keytool -list -keystore release.jks
でも確認できます。
表示されたAliasとGradleのkeyAliasが完全に一致しているか確認してください。
注意:Aliasは思い込みで入力せず、必ず実際のKeystoreをkeytool -listで確認するのがおすすめです。
解決方法1:正しいKey Aliasを設定する
たとえばkeytoolで、
Alias name: upload
と表示された場合は、Gradle側も、
keyAlias = "upload"
とします。
Kotlin DSLの例:
android { signingConfigs { create("release") { storeFile = file("release.jks") storePassword = "STORE_PASSWORD" keyAlias = "upload" keyPassword = "KEY_PASSWORD" } } }
解決方法2:Key Passwordを確認する
Keystore Passwordが正しいのに署名時だけ失敗する場合は、Key Passwordを確認します。
Oracleのkeytoolでは、Key Passwordを省略した場合、まずKeystore Passwordを使って秘密鍵を取得しようとし、それに失敗すると別のKey Passwordを要求します。 :contentReference[oaicite:4]{index=4}
つまり、古いKeystoreでは、
Keystore password: StorePass123 Key password: KeyPass456
のように別々になっている可能性があります。
解決方法3:storePasswordとkeyPasswordを入れ替えていないか確認する
次のような設定ミスがないか確認します。
storePassword = "KEY_PASSWORD" keyPassword = "STORE_PASSWORD"
正しくは、それぞれ作成時に設定した値を指定します。
storePassword = "STORE_PASSWORD" keyPassword = "KEY_PASSWORD"
解決方法4:正しいKeystoreファイルか確認する
絶対パスを使って確認すると、同名ファイルの取り違えを防げます。
Windows:
keytool -list -v -keystore "C:\Users\User\keys\release.jks"
macOS / Linux:
keytool -list -v -keystore /Users/user/keys/release.jks
ここで表示されるAliasが期待したものか確認してください。
解決方法5:GradleのstoreFileを確認する
Kotlin DSL:
storeFile = file("release.jks")
Groovy:
storeFile file("release.jks")
Android公式の署名設定でもstoreFile、storePassword、keyAlias、keyPasswordを指定します。 :contentReference[oaicite:5]{index=5}
解決方法6:keystore.propertiesを確認する
たとえば、
storeFile=/Users/user/keys/release.jks storePassword=StorePass123 keyAlias=release keyPassword=KeyPass456
のように管理している場合は、次を確認します。
- ファイルパス
- Keystore Password
- Key Alias
- Key Password
- 不要な空白
- 不要な改行
解決方法7:Aliasの大文字・小文字や記号を確認する
コピー時にAliasを書き換えてしまっていないか確認します。
実際のAlias: release-key
設定値:
release_key
この2つは異なる名前です。
keytool -listで表示されたAliasをそのまま利用してください。
解決方法8:指定AliasがPrivateKeyEntryか確認する
詳細表示します。
keytool -list -v -keystore release.jks -alias release
Androidアプリ署名に使用する鍵なら、秘密鍵を含むKey Entryである必要があります。
証明書だけのTrusted Certificate Entryを指定しても、APKやAABの署名用秘密鍵としては利用できません。
解決方法9:JKS形式として確認する
JKSファイルだと分かっている場合は明示できます。
keytool -list -v -keystore release.jks -storetype JKS
解決方法10:PKCS12形式として確認する
PKCS12の場合:
keytool -list -v -keystore release.p12 -storetype PKCS12
Oracleのkeytoolでは、-storetypeでKeystore形式を指定できます。 :contentReference[oaicite:6]{index=6}
解決方法11:GradleでstoreTypeを明示する
Kotlin DSLの例:
signingConfigs { create("release") { storeFile = file("release.jks") storePassword = "STORE_PASSWORD" keyAlias = "release" keyPassword = "KEY_PASSWORD" storeType = "JKS" } }
PKCS12なら、
storeType = "PKCS12"
とします。
解決方法12:Key Passwordを変更した履歴がないか確認する
秘密鍵のパスワードはkeytoolで変更できます。
過去に変更している場合、古いkeystore.propertiesが残っている可能性があります。
Oracleのkeytoolには、秘密鍵エントリのパスワードを変更する-keypasswdコマンドがあります。 :contentReference[oaicite:7]{index=7}
解決方法13:現在のKey Passwordが分かる場合は変更する
必要に応じて、
keytool -keypasswd -alias release -keystore release.jks
を使用できます。
現在のパスワード、新しいパスワードを入力してください。
注意:現在のKey Passwordが分からない状態で、このコマンドを使って強制的にリセットすることはできません。
解決方法14:keytoolでAliasを指定して確認する
keytool -list -v -keystore release.jks -alias release
Aliasが存在しない場合は、指定しているkeyAliasが間違っています。
解決方法15:使用しているkeytoolを確認する
Windows:
where keytool
macOS / Linux:
which keytool
複数JDKが表示される場合は、意図しない古いJDKのkeytoolを使用していないか確認してください。
解決方法16:Javaバージョンを確認する
java -version keytool -J-version
Android Studioが使用するGradle JDKと、ターミナルで使っているJava環境を比較します。
解決方法17:Android StudioのGradle JDKを確認する
Android Studioで、
Settings → Build, Execution, Deployment → Build Tools → Gradle → Gradle JDK
を確認してください。
解決方法18:Gradleのキャッシュだけを原因と決めつけない
このエラーは署名鍵の読み込みに関する問題なので、単純なGradleキャッシュ削除だけでは直らないことが多くあります。
まず、
keytool -list -v -keystore release.jks
でKeystoreとAliasを直接確認してください。
解決方法19:Cleanして再ビルドする
署名設定を修正したあとは、必要に応じてGradleを再実行します。
macOS / Linux:
./gradlew clean ./gradlew assembleRelease
Windows:
gradlew.bat clean gradlew.bat assembleRelease
App Bundleの場合は、
./gradlew bundleRelease
などで確認できます。
解決方法20:Generate Signed App Bundle or APKで再入力する
Android Studioで、
Build → Generate Signed App Bundle or APK
を開き、次の4項目をもう一度確認します。
- Key store path
- Key store password
- Key alias
- Key password
手入力していたAliasやパスワードにミスがないか確認してください。
解決方法21:バックアップKeystoreで確認する
バックアップがある場合は元のファイルを上書きせず、コピーして確認します。
keytool -list -v -keystore backup-release.jks
バックアップでは正常にAliasや証明書が表示される場合、現在のKeystoreファイルが破損している可能性があります。
重要:公開済みアプリの署名Keystoreは非常に重要です。トラブルシューティング中に元ファイルを削除、変更、上書きしないでください。
解決方法22:Keystoreファイルサイズを確認する
macOS / Linux:
ls -lh release.jks
Windows PowerShell:
Get-Item .\release.jks | Select-Object Name, Length
0バイト、またはバックアップと比べて極端にサイズが違う場合は破損を疑います。
解決方法23:CI/CDのSecretを確認する
ローカルでは正常なのにCI/CDだけ、
Failed to read key from store
になる場合は、CI側の、
- Keystoreファイル
- Store Password
- Key Alias
- Key Password
がローカルと同じか確認します。
特にSecret更新後、Key Passwordだけ以前の値が残っているケースに注意してください。
解決方法24:Base64化したKeystoreを復元している場合は破損を確認する
CI/CDではKeystoreをBase64文字列として保存し、ビルド時にファイルへ戻す構成があります。
デコード方法を間違えると、見た目は.jksでも中身が破損します。
復元後に、
keytool -list -v -keystore release.jks
が正常に動作するか確認してください。
「Failed to read key from store」と「Keystore was tampered with」の違い
次のエラー、
Keystore was tampered with, or password was incorrect
は、主にKeystore自体を開くStore Password側の問題で表示されます。
一方、
Failed to read key from store
では、Keystore自体を参照できていても、Aliasに対応する秘密鍵の取得に失敗している可能性があります。
「Failed to read key from store」と「Alias does not exist」の違い
Aliasが存在しない場合は、より直接的に、
Alias ... does not exist
などのエラーになることがあります。
しかしGradleやJava側の例外がラップされ、最終的に「Failed to read key from store」と表示される場合もあるため、Aliasは必ずkeytool -listで確認してください。
「Cannot recover key」が併記される場合
次のようなメッセージが原因として表示されることがあります。
Cannot recover key java.security.UnrecoverableKeyException
この場合は、Key Passwordを重点的に確認します。
Oracleのkeytoolでも、秘密鍵を取得するときはKey Passwordが必要であり、省略時にはKeystore Passwordをまず試す仕様です。 :contentReference[oaicite:8]{index=8}
Key Passwordを忘れた場合
まず次を確認してください。
- パスワードマネージャー
- 以前使用していたPC
- 安全に保存していた設定ファイル
- CI/CD Secret
- チームの秘密情報管理システム
- 過去のバックアップ
正しいKey Passwordが分からなければ、既存の秘密鍵を通常の方法で署名に利用することはできません。
新しいKeystoreを作れば直る?
公開前のアプリなら新しいKeystoreを作成して署名し直せます。
しかし、すでにGoogle Playへ公開しているアプリでは、新しいKeystoreを作成して単純に置き換えるのは避けてください。
Google Play App Signingを利用している場合は、App Signing KeyとUpload Keyが別管理になっている場合もあるため、現在の署名構成を確認する必要があります。
重要:既存公開アプリでこのエラーが出たからといって、原因確認前に新しい署名鍵へ変更しないでください。
パスワードをGradleへ直接書く場合の注意
次のような設定は技術的には可能です。
storePassword = "password" keyPassword = "password"
しかし、GitHubなどへコミットすると署名情報が漏えいします。
Keystoreファイルやパスワードは秘密情報として管理してください。
最短で原因を特定する手順
keytool -list -v -keystore release.jksを実行する- Keystore Passwordで正常に開けるか確認する
- 実際のAliasを確認する
- Gradleの
keyAliasと一致させる keyPasswordを確認するstoreFileが正しいKeystoreを参照しているか確認する- JKS / PKCS12形式を確認する
- バックアップKeystoreで比較する
それでも解決しない場合
「Failed to read key from store」が続く場合は、次を確認してください。
- Keystore Passwordが正しいか
- Key Passwordが正しいか
- 両方を混同していないか
- Key Aliasが正しいか
- AliasがKeystoreに実在するか
- Aliasが秘密鍵エントリか
- 正しいKeystoreファイルを使っているか
storeFileが正しいかkeystore.propertiesに古い値がないか- CI/CD Secretに古い値がないか
- 不要な空白や改行がパスワードにないか
- JKS / PKCS12形式が正しいか
- 使用中のJDKを確認したか
- Keystoreファイルが破損していないか
- バックアップで確認したか
まとめ
Android Studio「Failed to read key from store」は、主にKeystore内の指定された秘密鍵を正常に読み出せない場合に発生します。
特に多い原因は、
- Key Aliasの間違い
- Key Passwordの間違い
- Store PasswordとKey Passwordの混同
- 別のKeystoreを参照している
- Keystore形式やファイルの問題
です。
最初に次を実行してください。
keytool -list -v -keystore release.jks
Oracleのkeytoolでは、-listを使用してKeystoreのエントリを確認できます。 :contentReference[oaicite:9]{index=9}
ここで実際のAliasを確認し、Gradleの、
storeFile storePassword keyAlias keyPassword
が正しいか確認します。これらはAndroid公式のRelease署名設定でも個別に指定される値です。 :contentReference[oaicite:10]{index=10}
また、Keystore Passwordでファイル自体は開けるのに「Cannot recover key」などが表示される場合は、Key Passwordを重点的に確認してください。Oracleのkeytoolでは、Key Passwordを省略するとKeystore Passwordを秘密鍵取得に試し、それでも取得できなければ別のKey Passwordを要求します。 :contentReference[oaicite:11]{index=11}
公開済みアプリのKeystoreは非常に重要なので、トラブル発生時でも元のKeystoreを削除・上書きせず、コピーとバックアップを残した状態で原因を切り分けてください。
