PC パソコン

Android Studio「Failed to read key from store」の解決方法

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署名設定の修正など、実際に問題を解決するための手順を解説します。

  1. 「Failed to read key from store」とは
  2. 代表的な発生状況
  3. 主な原因
    1. 1.Key Aliasが間違っている
    2. 2.Key Passwordが間違っている
    3. 3.Keystore PasswordとKey Passwordを混同している
    4. 4.別のKeystoreファイルを参照している
    5. 5.指定したAliasが秘密鍵エントリではない
    6. 6.Keystore形式が異なる
    7. 7.Keystoreファイルが破損している
    8. 8.keystore.propertiesの値が間違っている
    9. 9.CI/CDのSecretが古い
    10. 10.JDKやkeytoolが異なる
  4. 確認手順1:Keystoreをkeytoolで確認する
  5. 確認手順2:Aliasだけ確認する
  6. 解決方法1:正しいKey Aliasを設定する
  7. 解決方法2:Key Passwordを確認する
  8. 解決方法3:storePasswordとkeyPasswordを入れ替えていないか確認する
  9. 解決方法4:正しいKeystoreファイルか確認する
  10. 解決方法5:GradleのstoreFileを確認する
  11. 解決方法6:keystore.propertiesを確認する
  12. 解決方法7:Aliasの大文字・小文字や記号を確認する
  13. 解決方法8:指定AliasがPrivateKeyEntryか確認する
  14. 解決方法9:JKS形式として確認する
  15. 解決方法10:PKCS12形式として確認する
  16. 解決方法11:GradleでstoreTypeを明示する
  17. 解決方法12:Key Passwordを変更した履歴がないか確認する
  18. 解決方法13:現在のKey Passwordが分かる場合は変更する
  19. 解決方法14:keytoolでAliasを指定して確認する
  20. 解決方法15:使用しているkeytoolを確認する
  21. 解決方法16:Javaバージョンを確認する
  22. 解決方法17:Android StudioのGradle JDKを確認する
  23. 解決方法18:Gradleのキャッシュだけを原因と決めつけない
  24. 解決方法19:Cleanして再ビルドする
  25. 解決方法20:Generate Signed App Bundle or APKで再入力する
  26. 解決方法21:バックアップKeystoreで確認する
  27. 解決方法22:Keystoreファイルサイズを確認する
  28. 解決方法23:CI/CDのSecretを確認する
  29. 解決方法24:Base64化したKeystoreを復元している場合は破損を確認する
  30. 「Failed to read key from store」と「Keystore was tampered with」の違い
  31. 「Failed to read key from store」と「Alias does not exist」の違い
  32. 「Cannot recover key」が併記される場合
  33. Key Passwordを忘れた場合
  34. 新しいKeystoreを作れば直る?
  35. パスワードをGradleへ直接書く場合の注意
  36. 最短で原因を特定する手順
  37. それでも解決しない場合
  38. まとめ

「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ファイルやパスワードは秘密情報として管理してください。

最短で原因を特定する手順

  1. keytool -list -v -keystore release.jksを実行する
  2. Keystore Passwordで正常に開けるか確認する
  3. 実際のAliasを確認する
  4. GradleのkeyAliasと一致させる
  5. keyPasswordを確認する
  6. storeFileが正しいKeystoreを参照しているか確認する
  7. JKS / PKCS12形式を確認する
  8. バックアップ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を削除・上書きせず、コピーとバックアップを残した状態で原因を切り分けてください。