发布签名Android Release Build“无法从密钥库读取密钥”

时间:2014-12-19 06:59:57

标签: android apk android-gradle

我正在使用gradle (assembleRelease)来生成发布apk。

我已将keystore文件保存在project / app / filename.keystore中(在应用程序中)

我已指定与登录gradle.properties文件相关的详细信息

RELEASE_STORE_FILE=filename.keystore
RELEASE_STORE_PASSWORD=****
RELEASE_KEY_ALIAS=alias
RELEASE_KEY_PASSWORD=****

我的build.gradle文件具有与签名相关的以下内容

signingConfigs {
        release {

            storeFile file(RELEASE_STORE_FILE)
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_KEY_PASSWORD
        }
    }

我已在同一个gradle文件中指定了签名配置,如下所示

 buildTypes {
    release {
        signingConfig signingConfigs.release
    }
 }

但是,当我尝试创建发布版本时,我不断收到错误

Error:Execution failed for task ':app:package<flavor>Release'.
> Failed to read key from keystore

我尝试了

  • 提供错误的密码以查看是否可以找到该文件。如果我找到了正确的路径,则会出现以下错误。我认为可以找到该文件。

    无法从商店“”读取密钥:密钥库被篡改,或密码错误

感谢您的意见!

4 个答案:

答案 0 :(得分:26)

我的问题是我输入了一个随机keyAlias。当尝试使用IDE(IntlliJ Idea和Android Studio:Build菜单 - >生成签名APK)签署apk时,通过单击文本框旁边的椭圆按钮(...)来输入关键别名,我发现我之前为我的密钥库设置的正确密钥别名。仔细检查您是否没有为密钥库输入一些临时随机密码和keyAlias,因为它们应与您在创建密钥库时为密钥库设置的密码和密钥别名相同。

如果您忘记了密码或密钥别名,我恐怕您必须创建一个新的密钥库,因为如果没有这些密钥库,您将无法读取密钥库。我建议将这两个属性(以及附加密钥库文件)保存在密码管理器(如Lastpass)中,因为将来需要它们。

答案 1 :(得分:6)

我的问题是我在gradle.properties文件中有额外的空格。所以如果你有这样的条目:

MYAPP_RELEASE_KEY_ALIAS=my-key-alias(\s)(\r\n)

确保所有条目都没有前导空格:

MYAPP_RELEASE_KEY_ALIAS=my-key-alias(\r\n)

答案 2 :(得分:6)

我使用带有别名和密码的双引号,如下所示

bootstrap/app.php

删除双引号解决了我的问题

storePassword="spass"
keyAlias="kalias"
keyPassword="kpass"

答案 3 :(得分:1)

我还没有完全解决这个问题,但我认为它与'Telegram \ TMessagesProj \ build.gradle'中的以下条目有关:

signingConfigs {
    debug {
        storeFile file("config/release.keystore")
        storePassword RELEASE_STORE_PASSWORD
        keyAlias RELEASE_KEY_ALIAS
        keyPassword RELEASE_KEY_PASSWORD
    }

    release {
        storeFile file("config/release.keystore")
        storePassword RELEASE_STORE_PASSWORD
        keyAlias RELEASE_KEY_ALIAS
        keyPassword RELEASE_KEY_PASSWORD
    }
}

请注意,DEBUG配置设置为'release.keystore'。

密码和别名存储在'Telegram \ gradle.properties'中,我已经取得了一些成功,将这些改为我在签名APK时使用的那些,并将调试行更改为指向您自己的签名密钥(通过Android创建)工作室)。

E.g。将行更改为

debug {         storeFile文件(“path / to / your / signing / key / ApkSigning.jks”)         ... }

并在gradle属性文件中设置适当的密码和别名。

希望有所帮助。