2013-12-08 139 views
47

我正在intellij和gradle下开发android应用程序。使用以下方法来生成密钥库文件:APK签名错误:无法从密钥存储区读取密钥

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

然后使用的build.gradle密钥库文件:

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

时候终于设法生成签名的apk文件:./gradlew assembleRelease

它给出错误:

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

Failed to read key from keystore

+1

将--info和--stacktrace添加到gradlew命令行应该会提供更多信息,可能有助于查明问题。 –

+2

我正面临这个问题,因为我输入的“密钥别名”在密钥库中不存在。 [这个答案](http://stackoverflow.com/a/28119723/1276636)帮了我。 – Sufian

回答

56

首先检查您的密钥库文件,例如您使用名称my-release-key.keystore创建文件。如果它的正确的和确实存在的文件夹Users/bournewang/Documents/Project检查别名,在你的例子是-alias ALIAS_NAME,但在配置您指定的别名迈克

41

为了找出什么是错的,你可以使用gradle产出的signingReport命令。

在Mac上:

./gradlew signingReport 

在Windows上:

gradlew signingReport 
+0

+1谢谢你的提示!通过这种方式我发现,在运行signedReport时,它没有列出我的发布签名配置,但只列出了Store位置,变体,配置和别名。它缺少Sha1,md5和有效的直到。原因是:我的别名是错误的:) - 所以如果上面的命令列出了整套信息,你应该全部设置(variant,config,store,alias,md5,sha1,直到有效),否则,确保你有密码,密钥库和别名在您的项目的build.gradle文件 – AgentKnopf

+0

设置正确运行该它显示的是: '变:释放 配置:none' 是我的.keystore删除? –

+0

谢谢一堆! gradlew直接位于android studio项目目录中。调用signingReport显示调试密钥的别名实际上是“AndroidDebugKey”... – hotzen

9

很有可能是你的关键的别名不为你的密钥库文件存在。

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

+0

这是正确的答案,别名是错误的:D – TheBronx

0

这可能是该参数中的任何一个,而不仅仅是文件名或别名 - 对我来说是关键密码。

1

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

DEBUG_STORE_PASSWORD=androiddebug 
DEBUG_KEY_ALIAS=androiddebug 
DEBUG_KEY_PASSWORD=androiddebug 
1

在我的情况,而拷贝从其他来源的文本它在某种程度上包含在剪贴板条目的末尾的空间。这种方式的关键密码最后有一个空间。

+0

欢迎使用stackoverflow。这并不能解答这个问题。一旦你有足够的声誉,你将能够评论任何帖子;相反,提供不需要提问者澄清的答案。 –