2017-01-08 98 views
2

我使用Android Studio生成了用於簽署Android應用的密鑰。當我嘗試從Android Studio生成簽名的APK時,它工作正常。從Android Studio簽名的apk工作,但爲什麼相同的密鑰庫不能在命令行上工作?

但是,當我嘗試使用apksigner工具進行簽名時,同樣的鍵不起作用。這是我正在使用的命令。

apksigner sign --ks mykey.jks --ks-key-alias MyAlias --out app-myapp-release.apk app-myapp-release-aligned.apk

我得到以下錯誤:

產生java.io.IOException:密鑰庫被篡改,或密碼不正確

有什麼建議?

**更新** Android Studio版本2.2.3 密鑰庫是使用「生成簽名的APK」對話框從「生成」菜單生成的。

+0

1.這個keystore-alias-password組合與jarsigner一起工作嗎? 'jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore mykey.jks -signedjar out.apk app-myapp-release-aligned.apk MyAlias' 2.如果您在命令行上提供密鑰庫密碼,它是否可以與apksigner配合使用使用'-ks-pass pass:yourpassword'? –

+0

1.是的,它與jarsigner 2一起工作。不,它不; t。它顯示錯誤'java.io.IOException:無法從mykey.jks獲取具有別名「myapp」的密鑰。錯誤密碼?' – Nagarjun

+0

謝謝!您介意發佈步驟以使用Android Studio(哪個版本?)生成密鑰庫,以使密鑰庫不能與apksigner一起使用?我懷疑這個問題可能與密碼中使用的某些字符有關,但我還沒有能夠自己再現這一點。 –

回答

8

我剛剛有這個確切的問題,還有更多的嘗試唱歌的apk。

嘗試將這些選項添加到您的登錄命令:

--ks-pass stdin --key-pass stdin 

現在就可以正常輸入您的庫密碼,並依次密鑰(化名)的密碼。

+1

非常感謝!您在apksigner中發現了一個錯誤(https://code.google.com/p/android/issues/detail?id=233426)。 Nagarjun @,這個解決方法解決你的問題與apksigner和你的密鑰庫? –

+0

如果你正在解決這個問題,也許看看我的答案在這裏的評論http://stackoverflow.com/questions/40653492/apksigner-not-accepting-password/41703165#41703165看起來即使這不幫助一些奇怪的字符 –

+0

很高興解決的東西,但對於這些問題中的一些,我們還沒有步驟來重現它們。到目前爲止清楚的是,jarsigner對輸入密碼執行了一些未公開的轉換(例如,不使用當前字符編碼對輸入密碼進行解碼 - 請參閱我對OP的評論)。因此,如果您有重現步驟,請通過https://code.google.com/p/android提交錯誤報告。 –

0

我不能寫評論)所以我添加了這個答案,並希望這會幫助你解決你的問題。你檢查這些鏈接:

只爲信息:你JKS文件應包含私鑰證書意味着簽署APK,這裏是official link瞭解更多詳情。

+0

感謝您的回覆。我已經嘗試過這些方法。 keytool列出指紋。它與apksigner工具唯一的問題。 – Nagarjun

+0

好吧,我假設你使用Gradle,看到這[link1](http://stackoverflow.com/a/34652052/5806009)和這[link2](https://coderwall.com/p/zrdsmq/signing -configs-with-gradle-android)詳述 –

+0

不,我正在使用隨Android構建工具一起提供的apksigner工具。正如我在文章中提到的,它可以在Android Studio中正常工作。但我不想將密碼或密鑰庫信息硬編碼到gradle構建文件中,這些文件將被檢入到git中。 – Nagarjun

相關問題