【问题标题】:APK signing error : Failed to read key from keystoreAPK 签名错误:无法从密钥库中读取密钥
【发布时间】:2013-12-25 12:52:58
【问题描述】:

我正在 intellij 和 gradle 下开发 android 应用程序。并使用以下方式生成密钥库文件:

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

然后使用 build.gradle 中的 keystore 文件:

signingConfigs {
    robert {
        storePassword 'robert'
        storeFile file('/Users/bournewang/Documents/Project/android.keystore')
        keyPassword 'robert'
        keyAlias 'mike'
    }
}

当最终尝试生成签名的 apk 文件时:./gradlew assembleRelease

它给出了错误:

任务 ':Myexample:packageRelease' 执行失败。

从密钥库中读取密钥失败

【问题讨论】:

  • 在 gradlew 命令行中添加 --info 和 --stacktrace 应该会为您提供可能有助于查明问题的更多信息。
  • 我遇到了这个问题,因为我输入的“密钥别名”在密钥库中不存在。 This answer 帮了我。

标签: android gradle apk


【解决方案1】:

为了找出问题所在,你可以使用 gradle 的 signingReport 命令。

在 Mac 上:

./gradlew signingReport

在 Windows 上:

gradlew signingReport

【讨论】:

  • +1 谢谢你的提示!通过这种方式,我发现,在运行 signingReport 时,它确实列出了我的发布签名配置,但只列出了 Store 位置、变体、配置和别名。它缺少 Sha1、md5 和有效的直到。原因是:我的别名错误:) - 所以如果上面的命令列出了整个信息集,你应该全部设置好(变体、配置、存储、别名、md5、sha1、有效直到),如果没有,请确保你在项目的 build.gradle 文件中正确设置密码、密钥库和别名
  • 运行它显示:Variant: release Config: none 我的 .keystore 被删除了吗?
  • 非常感谢! gradlew 直接位于一个 android studio 项目目录中。调用signingReport显示调试密钥的别名实际上是“AndroidDebugKey”...
  • 或者对我来说是(在 android 平台导向器中)./gradlew.bat signingReport
  • 我的别名错误,得到的结果没有错误但不是所需的数据,所以对于那些一开始不知道如何解释报告的人,您的密钥必须使用 SHA1 和它旁边的MD5值认为它是正确的。
【解决方案2】:

首先检查您的密钥库文件,在您的示例中,您创建了名为 my-release-key.keystore 的文件。如果它正确并且确实存在于文件夹 Users/bournewang/Documents/Project 检查别名中,在您的示例中它是 -alias alias_name,但在配置中您指定了别名 mike

【讨论】:

    【解决方案3】:

    很可能您的密钥库文件不存在您的密钥别名。

    这个answer 应该可以解决您的签名问题;)

    【讨论】:

    • 为什么我的 android studio 4.0.1 版没有选项
    【解决方案4】:

    删除double-quotes 解决了我的问题,现在是:

    DEBUG_STORE_PASSWORD=androiddebug
    DEBUG_KEY_ALIAS=androiddebug
    DEBUG_KEY_PASSWORD=androiddebug
    

    【讨论】:

    • 你从哪里删除的??在天上??
    【解决方案5】:

    就我而言,在从其他来源复制文本时,它以某种方式包含剪贴板条目末尾的空间。这样密钥密码的末尾就有一个空格。

    【讨论】:

      【解决方案6】:

      对于不使用签名配置并尝试通过在命令行键入所有参数来测试 Cordova Release 命令的人,如果您的密码中有特殊字符,您可能需要用单引号将您的密码括起来

      cordova run android --release -- --keystore=../my-release-key.keystore --storePassword='password' --alias=alias_name --password='password'
      

      【讨论】:

        【解决方案7】:

        重要的是别名或其他密码错误。请检查您的密码,您的问题就解决了。如果您忘记了密码,您可以从 androidStuido3.0/System/Log... 搜索关键字密码并保存您的密码

        【讨论】:

        • 您能否确认我应该查看的日志文件是否是这个 == idea.log ,位于路径 == C:\Users\xxxx\.AndroidStudio3.5\system\log\想法.log
        【解决方案8】:

        请确保您已正确填写以下内容

        • 密钥库文件路径
        • 密钥库 别名
        • 密钥库密码

        android/key.properties

        中的密钥库

        【讨论】:

          【解决方案9】:

          在 Android Studio 中转到 Build > Clean Project,然后使用 Build > Generate Signed Bundle / APK... 重新生成签名的 APK,然后清除密码字段并重新输入密码

          【讨论】:

          • 对于第一次输入别名错误,即使更改别名仍然出现相同错误的人可以试试这个。它对我有用。
          【解决方案10】:

          在我的情况下,出于某种原因,在将 android studio 更新到最后一个稳定版本后,默认情况下的密码被更改了,我只需要再次设置正确的密码就可以了

          【讨论】:

            【解决方案11】:

            根据您生成密钥文件的位置,keytool 可能引用不同的二进制文件,在不同的 JVM 版本上运行。这些不一定兼容,请尝试调整版本。

            【讨论】:

              【解决方案12】:

              我今天遇到了同样的错误。

              任务“:app:packageRelease”执行失败。 执行 com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable 时发生故障 com.android.ide.common.signing.KeytoolException:无法从商店“E:\keystore\news.jks”读取关键新闻:密钥库被篡改,或密码不正确

              我有相同的密钥密码和密钥存储密码。但是我写错了密码

              【讨论】:

                【解决方案13】:

                它可以是任何一个参数,而不仅仅是文件名或别名 - 对我来说是密钥密码。

                【讨论】:

                  猜你喜欢
                  • 2016-04-22
                  • 2015-09-13
                  • 2016-12-05
                  • 1970-01-01
                  • 2015-02-18
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-08-27
                  • 1970-01-01
                  相关资源
                  最近更新 更多