2014-12-19 68 views
12

我使用gradle (assembleRelease)来生成发行版apk。发行签名Android发行版“无法从密钥库读密钥”

我已保存的项目/应用/ 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 

我尝试以下

  • 给人一种错误的密码,看看是否文件可以找到。给出以下错误与正确的路径那里我假设该文件可以找到。

    无法读取存储“”键:密钥库被篡改,或密码不正确

感谢您的输入!

+1

我有同样的问题,但还没有想出来:( – Markymark 2014-12-24 00:22:13

+1

我试着在android studio中签署APK与Build> Generate Signed APK“。有趣的是签署是成功的。但是,当我使用gradle任务“assmbleRelease”时,我得到以上错误。现在我创建了一个新的密钥,以在qa期间启用自动部署。只是一个工作,直到我找出解决方案 – HasaniK 2014-12-24 00:26:03

+2

@ Marky17和其他人有同样的问题:我正面临这一点,因为我输入的“密钥别名”不存在于密钥库中。 [这个答案](http://stackoverflow.com/a/28119723/1276636)帮了我。 – Sufian 2015-03-10 06:23:31

回答

26

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

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

+1

非常感谢! – Ilario 2016-04-09 09:16:13

+1

你为我节省了很多时间!正在和我的一个老员工合作。谢谢! – devgrg 2016-06-07 00:47:49

1

我还没有完全修复了这个问题,但我认为这是关系到“电报\ 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 Studio)。

E.g.该行更改为

调试{ storeFile文件( “路径/到/你/签名/按键/ ApkSigning.jks”) ... }

,并设置相应的密码和别名在gradle这个属性文件。

希望有所帮助。

4

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

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

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

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

我是用双引号用别名和密码,如下图所示

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

删除双引号解决我的问题

storePassword=spass 
keyAlias=kalias 
keyPassword=kpass