Android Studio:无法恢复密钥。

125

我在 StackOverflow 上搜索了一段时间,但我只是想确保一下...

我前段时间清空了我的笔记本电脑,并备份了所有文件。我已经备份好了我的 android.jks 文件,并放回原处。但当我尝试生成签名的 APK 时,它给出了每个人都遇到的同样可怕的错误:

Error:Execution failed for task ':app:packageRelease'.
> Failed to read key conjugationappkey from store     
"/Users/wasimsandhu/android.jks": Cannot recover key

我有我的android.jks、密钥密码和密钥库密码,一切都正确。我缺少什么?我备份了所有文件,所以如果我需要特定的文件,我可以找到它,但我不知道该怎么做...

如果我表达不清楚,请让我澄清。谢谢!


2
如果您在密钥库密码中使用了字符&或@,则不要滚动到答案部分,跳转至此链接(https://dev59.com/ooHba4cB1Zd3GeqPXemw),查看sharma的答案。 - meyasir
请检查您的密钥密码是否有任何拼写错误。对我来说,我不小心拼错了它。 - Liya
18个回答

140

我对这个没有引起任何关注并不感到惊讶,但是对于那些偶然发现这篇文章的人,以下是我所做的。

就像我说的,我所有的文件都做了备份。 我从一个旧的备份中恢复了android.jks文件。 然后,我打开了一个终端窗口,输入了以下内容:

keytool -storepasswd -new [insert new keystore password] -keystore [insert keystore file name]

keytool -keypasswd -alias [insert alias] -new [insert new key password] -keystore [insert keystore file name]

密钥库和密钥密码必须相同!这解决了我的问题,希望也能帮到你。


5
谢谢!你是怎么发现密码必须相同的?我今天开始遇到了这个错误。之前一直使用两个不同的密码,一切正常。 - Alen Siljak
8
我的密码相同,但我仍然遇到了这个错误。我之前使用相同的密钥签署过旧版本。现在该怎么办? - Tushar Gogna
7
到目前为止,我的情况仍然出现这个错误:“keytool 错误:java.security.UnrecoverableKeyException: 无法恢复密钥”。 - 0xAliHn
2
对我来说也是同样的问题。执行第一行后,它会要求输入密码。我输入了密码,但它却显示“keytool 错误...密钥库已被篡改或密码不正确”。 - Ammar Bukhari
2
有趣的是,Android文档明确提到这两个密码应该不同。 - Ehsan Khaveh
显示剩余15条评论

75

[更新:此方法不再适用于Android studio 3.0及以上版本]

我遇到了类似的问题,在网上浪费了三个小时尝试各种解决方案后,我决定深入挖掘。

以下是我的解决办法: 对我来说,“无法恢复密钥”错误是因为我的“密钥库密码正确”,但“密钥密码(密钥别名)不正确”。 我很确定两个密码是相同的,但令我失望的是它们并不相同,我不知道第二个密码是什么。由于我已经签署了APK,所以我检查了日志文件,可以在以下位置找到:

  • C:\ Users \ your_username \ .AndroidStudio2.1 \ system \ log \

打开来自您签署apk的日期的日志文件,并查找以下条目:

 INFO - .project.GradleExecutionHelper - Passing command-line args to Gradle Tooling API: [--configure-on-demand, -Pandroid.injected.invoked.from.ide=true, 
-Pandroid.injected.signing.store.file=E:\HobbyProjects\XYZProject\gpsjs.jks, 
-Pandroid.injected.signing.store.password=***KeyStorePassword***, 
-Pandroid.injected.signing.key.alias=***alias_name***, 
-Pandroid.injected.signing.key.password=***Key password***, 

您将会发现密码以明文形式呈现。 即使您忘记了密码,这也会起作用。


3
是的!终于找到了!我的密码在你提到的文件夹中的“idea”文件中。我甚至尝试使用密码破解软件,但它给了我别名密码,我以为它是密钥库的密码,但实际上不是。 - George
谢谢!我一直在使用我签署 APK 时输入的“主密码”,但我只需要重复输入“密钥密码”。 - JCarlosR
8
这是否适用于AndroidStudio3.0?我看到我的密码显示为*********。 - TheLearner
1
我的文件中写着:-Pandroid.injected.signing.store.password=*********,-Pandroid.injected.signing.key.alias=mykey,-Pandroid.injected.signing.key.password=*********。 - Androidcoder
2
@Androidcoder,Android Studio团队在最近的版本中修复了这个漏洞。 - Build3r
显示剩余6条评论

35
如果有人需要帮助——在我的情况下,问题是“密钥库密码”和“密钥密码”不正确。

您的密码应标记为正确的密码。 - acmpo6ou

22

我尝试了所有给出的答案和评论 :(

我的关键密码和密钥库密码完全相同。 使用Android Studio 3.4

对我有效的方法是强制停止Android Studio,重新启动,清除并重新构建项目,然后生成已签名的APK。 所有配置完全相同,但这次它 可行了


3
我清理并重新构建了项目,然后它正常工作了。 +1 赞 - sanjeeb
1
这对我有用。对于一个IDE来说,搞砸关键信息的管理并不是一个很酷的“功能”。 - Marc-André Weibezahn
已在Android Studio 3.6.2中确认附言:我爱你 - bjm904

12
[Android Studio 3.3] 我在生成已签名 APK 时遇到“无法恢复密钥”错误。我能够检查旧的 idea.log 文件以验证我的密码正确性:密钥库和密钥密码相同且正确的。

在终端中更新密钥密码:

keytool -keypasswd -alias MYKEY -keystore KEYSTORE

现在似乎不再允许在密钥库和密钥中使用相同的密码。当我尝试时,keytool返回了一个错误。在为密钥设置不同的密码后,Android Studio生成了已签名的APK。

也许,在之前的Android Studio版本中需要使用相同的密码,但现在可能是相反的。


我在2周前更新了我的应用程序,但今天无法工作。我使用这个来将密码更改为相同,并更新了Android Studio,现在我发布了一个新版本。 - Alejandro Cumpa
在@Build3r的回答和这个回答之间,我能够将两个密码设置为不同的可接受值,并成功地签署了我的应用程序。谢谢,伙计们! - Peter Gluck

4

这可能会帮助到某些人。

几天前,我将我的Android项目备份到了GitLab上,然后安装了Windows 10。之后我克隆了它。我确切地知道密钥别名和密码。

然后,在生成已签名的APK时,我输入了这些凭据但失败了。

我把jks文件放在了app文件夹中。我将其从那里移除,并在Android项目的根目录下创建了一个单独的文件夹,将jks文件放在那里

然后,我尝试清理、重建项目,然后重新启动Android Studio。 最终生成了已签名的APK:D


2

我的密码一样,但还是出现了这个错误。清理、重建和重新启动 Android Studio 对我没有用。唯一有效的解决方案是将 keystore.jks 文件移动到一个新位置。希望这可以帮助您。


我遇到了相同的密码错误,我只是重新输入了密码,然后它又可以正常工作了。希望这能帮助到某些人。 - androidexpert35

2

当您的密钥密码或密钥库密码不匹配时,才会出现此问题。


那对我来说并不是这样的情况。 - Loren.A

1

我尝试了清理和重建以及gradle同步,但仍然遇到了“无法恢复密钥”错误。

文件 > 无效缓存 / 重新启动解决了我的问题。

我不需要更改我的密钥密码或者我的.jks密钥文件。我继续使用我的原始“密钥库密码”和“密钥密码”(它们并不相同)。


1

对我来说,解决方案是这两个方案的结合。首先,我必须进行Gradle同步:

enter image description here

然后退出、清理并重新构建项目。

enter image description here

我的密码从未改变。没有先进行Gradle同步,只进行清理和重建也对我没用。Android Studio版本为4.1.2。
这是在一个月内没有生成过之前版本的签名包后出现的,以前从未遇到过这个错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接