Android apksigner不接受密码

Android apksigner不接受密码,android,apk,sign,Android,Apk,Sign,到目前为止,我一直使用以下方法签署我的APK: jarsigner-verbose-sigalg SHA1withRSA-digestalg SHA1-keystore{keystore file}{apk file}{keystore alias} 但是,我正在尝试使用新的apksigner工具,我无法让它工作,因为它总是告诉我密码无效。这是不可能的,因为我已经做过多次了,jarsigner有效,而apksigner无效。我尝试过的命令如下: apksigner符号--ks{keystore

到目前为止,我一直使用以下方法签署我的APK:

jarsigner-verbose-sigalg SHA1withRSA-digestalg SHA1-keystore{keystore file}{apk file}{keystore alias}

但是,我正在尝试使用新的apksigner工具,我无法让它工作,因为它总是告诉我密码无效。这是不可能的,因为我已经做过多次了,jarsigner有效,而apksigner无效。我尝试过的命令如下:

apksigner符号--ks{keystore file}{apk file}

apksigner sign--ks{keystore file}--ks密钥别名{keystore alias}{apk file}

现在最奇怪的是,我创建了一个新的密钥库来测试它,并且有了这个新的密钥库,它就可以工作了。所以我不明白有什么区别。下面是通过对这两个数据库调用“keytool-v-list-keystore{keystorefile}”获得的信息

生产密钥库(我删除了一些文本,以防出现危险):

新的测试密钥库:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: app
Creation date: Nov 17, 2016
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Foobar, OU=Foobar, O=foobar, L=Unknown, ST=Unknown, C=Unknown
Issuer: CN=Foobar, OU=Foobar, O=foobar, L=Unknown, ST=Unknown, C=Unknown
Serial number: 448c7afc
Valid from: Thu Nov 17 11:40:26 CET 2016 until: Mon Apr 04 12:40:26 CEST 2044
Certificate fingerprints:
     MD5:  3E:29:C0:3C:30:B4:DC:E0:A5:94:1D:2E:E9:86:58:CA
     SHA1: 3D:09:B4:42:A2:7C:14:C7:3E:54:33:0E:AB:75:2E:F1:19:23:00:FA
     SHA256: 7F:E0:51:F1:6A:53:45:56:42:B9:F9:38:92:69:81:7A:DA:71:FF:44:51:15:7F:F9:B4:1C:AA:2B:53:4A:89:72
     Signature algorithm name: SHA256withRSA
     Version: 3

Extensions: 

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: BC 1B E6 C4 6D 25 01 70   CA AC 81 34 81 4B AE 41  ....m%.p...4.K.A
0010: 10 DF D8 13                                        ....
]
]



*******************************************
*******************************************

原始答案可以在问题的评论中找到,我将其移动到这里是为了将问题标记为已回答


虽然我仍然不能确定100%的细节,但问题是我用于密钥库的密码包含特殊字符(*和!)。将密码更改为字母数字格式后,问题得到解决。因此,似乎apksigner不接受与jarsigner相同的密码格式。

哇,我不知道您可以在密钥库中更改密码

不管怎样,我遇到了这个问题,结果证明你不需要更改密码。诀窍是设置选项

--ks-pass stdin --key-pass stdin
这被认为是默认行为,但在我的例子中,只有当我特别包括这些行为时,它才起作用

执行该命令时,系统会要求您输入密码,即使使用诸如!之类的字符,该命令也能正常工作

这样使用它

./apksigner sign --ks test.jks --ks-key-alias test --ks-pass pass:testtest --key-pass pass:testtest Test_Aligned.apk

我还不能投票/发表评论,但max的修正为+1:

./apksigner sign --ks test.jks --ks-key-alias test --ks-pass pass:testtest --key-pass pass:testtest Test_Aligned.apk
在我的密码前面加上“pass:”对我来说很有用

--ks-pass pass:MyPassword
--key-pass pass:MyPassword

以下是对我有用的,我改变了这一点:

--ks传递“我的密码”

为此:

--ks密码:“我的密码”


要使用的奇怪API。。。但是成功了

您从apksigner获得的错误消息/异常是什么?另外,通过--ks pass:和--key pass:以不同的组合向apksigner提供密码会改变什么吗?Try--ks pass和no--key pass,以及--key pass和no--ks pass。@AlexKlyubin好的,所以我得到的错误是一个简单的“密码验证失败”,但在尝试了您所说的,在cmd中提供密码后,我得到了“Keystore Password不支持的密码规范”。我不知道哪个是密码规范,但我将密码更改为更简单的版本(没有特殊字符),现在它可以工作了。我不明白他们为什么要改变格式。无论如何,这解决了我的问题,所以如果你想把评论移到一个答案,我会把它标记为接受。如果你能解释一下为什么会发生这种情况,那将是一个很好的补充:d.谢谢你。我很高兴听到你找到了一个工作机会。您是否删除了特殊字符或用ASCII等效字符替换了它们(例如,“a with umlaut”变为“a”)?我删除了它们,并且我使用的密码仅包含字母数字字符。我相信我已经找到了答案。我现在已提交文件跟踪该问题,并正在制定修复/解决方案。keytool/jarsigner中的这个问题可能也解释了Gradle/Android Studio的Android插件发布的类似问题,即无法使用某些密钥库,报告密码错误。不幸的是,我已经尝试过了,但仍然不起作用,我正在使用字符-,在这种情况下,但我仍然认为这是令人沮丧的,这是没有记录在任何地方,我可以找到。jarsigner仍然使用相同的密码,因此这不是密码的问题。为我工作,我想不出如果他们将值
stdin
作为“默认值”实现,会发生什么情况。
--ks-pass pass:MyPassword
--key-pass pass:MyPassword