解决方法
编辑:我以为我会提供详细的答案.希望这个信息将是有用的.
什么是签名和为什么需要.
android使用的apk签名机制就是usage of digital signature应用于应用程序的字节码和资源的例子,以确保:
>诚信(下载后不会篡改您的应用程序)
>真实性 – 您是将应用发布到GooglePlay的用户
为了更好地了解digital signature,我建议您也可以通过public-key cryptography浏览.
这是如何工作的
Android使用与标准Java应用程序签名/验证相同的标准JDK工具:
> jarsigner – 使用提供的私钥签署数据,并使用certificate(即与您的身份相关的公钥)验证数据,
> keytool – 在密钥库中管理私钥和证书.这些钥匙需要jarsigner.
使用jarsigner手动签名应用程序或使用IDE导出签名的应用程序(在引擎盖下使用keytool和jarsigner)时,您可以找到放置在已签名的.apk存档的Meta-INF目录中的签名相关文件:
> CERT.SF – 包含应用程序组件的SHA哈希的文件
> CERT.RSA(或.DSA) – 上述文件公开证书的数字签名,以验证此签名.
您可以阅读更多关于唱歌工作的细节here.
如何正确签署申请发布.
This article很好地描述了您需要遵循的步骤.
注意:在继续签名之前,请考虑重要的预发布步骤:删除日志/关键字符串文字,使用proguard进行混淆等.
下面我将提供一些重点:
生成您的私钥并将其放在java密钥库中.
如果您没有密码库,则可能需要先创建密钥库.创建密钥库时,您需要创建密钥库密码,用于确保密钥存储库数据的完整性(即,您将被警告,密码库在某人之后被篡改,而不是新增证书).实际上,如果您的密钥库文件保持安全,则此密码不是至关重要的.如果你有一天忘记了,你可以走开.
当生成私钥时,还将要求您创建PrivateKey密码,该密码将用于加密密钥库内的私钥.这是确保您需要保留的非常重要的密码
>你的私钥真的很私密.最重要的是
>没有这个密码,您将无法使用您的私钥签名并发布您的应用程序的未来更新;
当您在Eclipse中生成新的私钥时,还会要求您提供用于创建自签名证书的身份信息.
作为下一步,您将使用指定密钥库文件中的私钥对应用程序进行签名,并将.apk更新为与上述签名相关的文件.
一些重要术语:
密钥库只是一个特定格式的私钥/证书的单个二进制文件保存列表.它使用由KeyStore.java提供的API以编程方式访问.您的密钥库可以包含多个私钥条目,每个私钥都由其别名标识.
在大多数情况下,您的密钥库将具有单个私钥,并具有与此私钥匹配的单个自签名证书.
密钥库密码用于密钥库内容的完整性检查.
如果您松开此密码,但您仍然拥有存储在其中的私钥密码,则可以通过运行以下cmd来“克隆”您的密钥库并提供新的密钥库密码:
keytool -importkeystore -srckeystore
path/to/keystore/with/forgotten/pw -destkeystore
path/to/my/new/keystore
提供新密码,并将旧的密钥库密码留空 – 您只会收到警告.然后,您可以使用新的密钥库,并删除旧密钥库.
还有其他方法可以检索您的私钥,而不使用密钥库密码.
私钥密码 – 保护(加密)密钥库内的私钥.这是非常重要的,因为它允许您访问您的私钥,除其他外,为您的应用程序签名更新.通常很难恢复它.
自签名证书 – 非常简单的证书将您的身份(姓名/组织/电子邮件)绑定到您的公钥.此证书在签名操作期间被添加到.apk文件中,并将在安装前在用户设备上使用以验证.apk.