2013-12-08 137 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。這並不能解答這個問題。一旦你有足夠的聲譽,你將能夠評論任何帖子;相反,提供不需要提問者澄清的答案。 –