Android Studio中无法导出已签名的APK文件

5
当我使用keytool -list -keystore /path/to/keyfile.jks并输入我的密码时,我能够看到条目,但是当我在尝试使用相同的密码生成签名APK时,我会收到以下错误信息:

无法加载密钥库:密钥库已被篡改或密码不正确

请帮忙解决!

尝试将您的项目导入到Eclipse中,然后转到文件导出,并在提示时提供正确的信息。 Android Studios仍处于beta版本,因此您应该预期会有错误。 - ChallengeAccepted
@ChallengeAccepted 感谢回复。只需要澄清一下,更改密钥库位置不应被视为篡改,对吧?问题是,我升级了Android Studio,并备份了旧的安装目录。密钥库文件被放置在旧目录中。您有什么想法吗? - Sankalp Sharma
只要你在需要的时候更新或指定密钥库目录,那就没问题了。如果找不到它,请确保进行更新或者指定正确路径。 - ChallengeAccepted
1
@ChallengeAccepted,我最终找到了答案。请查看我的回复。 :) 顺便说一下,我发布的应用程序是https://play.google.com/store/apps/details?id=thoughtsdiary.free 如果你愿意,请去看看。 - Sankalp Sharma
这其实是一个做得很漂亮的应用,我喜欢这个独特的想法。我会下载并使用的。干得好! - ChallengeAccepted
显示剩余2条评论
3个回答

18

经过20小时不懈的搜索,我终于找到了答案。 显然,密码中的字符“&”存在问题,如此处所述:https://code.google.com/p/android/issues/detail?id=36350 尽管在我的情况下,该字符是“@”。

对于任何卡住的人,这是我做的(也适用于他们)

  1. 我使用了keytool -keypasswd -alias <key_name> -keystore mykeystorek.jks命令来更改我的密钥别名密码。
  2. 由于我怀疑我的原始文件存在问题,我认为最好将密钥导出到另一个文件中。我使用了keytool -importkeystore -srckeystore my.keystore.jks -destkeystore new.keystore -deststoretype pkcs12后跟keytool -importkeystore -srckeystore new.keystore -srcstoretype pkcs12 -destkeystore final.keystore -deststoretype jks来完成这个步骤。

这样做会将原始密钥库值以PKCS12格式导出,然后再将其转换回Java密钥库格式,并保存为final.keystore文件。在所有这些命令中,提示要求输入新目标密码,我小心地避免了“@”和“&”这两个字符。

现在它可以工作了! 如上面分享的链接所示,这似乎是由于SDK Tools 20中推出的某些更新导致的。我知道这很糟糕。 其他应用程序所有者也对Google感到非常愤怒。:(


1
+1 解决问题并回来为社区提供答案。很高兴你解决了它 :) - ChallengeAccepted
1
我遇到了完全相同的问题,在旧版本的Android Studio中创建带有“@”符号的密钥库密码。现在已经升级到了新得多的版本,但无论我怎么做(按照您上面的指示),都会出现Keystore was tampered with or password was incorrect的错误。我需要使用较旧版本的keytool吗? - NoCarrier
@NoCarrier 很抱歉这么晚才加入讨论,我猜你已经解决了这个问题。但是显然,在使用Android Studio签名时,这些字符是不允许的。虽然最近Android Studio已经退出Beta版,但我还没有尝试过。如果你成功了,请告诉我们。 :) - Sankalp Sharma
由于我正在尝试执行第一个命令,不幸的是,在终端窗口中出现了以下错误:系统找不到指定的文件。 - meyasir
在执行第一个命令时,我遇到了以下错误:系统找不到指定的文件。@yahme3,你能解决这个问题吗? - Kavin Raju S
显示剩余4条评论

0

无论我尝试了什么,都无法让Android Studio签署我的APK。

即使我尝试创建新的密钥库和密钥,并在Android Studio构建发布期间使用它来签署,我仍然会遇到这个错误。

最终,我通过使用密钥库浏览器将密码重新设置为“changeit”,同时适用于密钥库和我正在使用的签名密钥,才使其正常工作。

这对我来说既令人不安又令人困惑。这不应该发生,但确实发生了。


1
同意这太令人困惑了,几乎是不可逆的,并且对开发者影响很大。我认为我们应该尝试以更清晰的方式记录它。我希望能够开始一个公共的 Github 存储库,记录开发者在其中遇到的常见陷阱。 - Sankalp Sharma

-1

我之前也遇到过类似的问题,是因为上传密钥文件出现了损坏。为了解决这个问题,我从应用和安卓目录中删除了该文件,并按照这个链接 https://reactnative.dev/docs/signed-apk-android 重新创建了它。最后通过运行 gradlew buildRelease 命令,问题得以成功解决。


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