如何使用多个证书对APK进行签名,以便我在发布到Android电子市场时执行此操作:
版本1.0 =>签署证书A
版本2.0 =>签署证书A&乙
版本3.0 =>签署证书B
Android Market确实给了我一些希望,但我不知道该怎么做,当我上传一个不同的签名证书时它会给我这样的信息:
“必须使用至少一个与先前版本相同的证书对apk进行签名。”
动机:
我已经在市场上发布了一个应用程序,使用Android签名工具作为MotoDev Studio for android的一部分。问题是它本身处理密钥,并且没有办法(记录)来获取密钥。我想改变它以使用我更有控制权的密钥库和证书,即使我不再使用MotoDev Studio也可以使用。此外,似乎MotoDev Studio将阻止您使用共享库等新功能。
更新2011年5月3日:
他们实际上非常快速和迅速地更新了MotoDev Studio,但似乎我相信Google仍然应该提供一些解决方案想要更改其应用程序的证书。将应用程序更新为使用相同的证书,随着时间的推移创建新的证书,并可能创建一个新证书,以便您可以将应用程序的支持和分发交给其他人。
答案 0 :(得分:14)
如果您想多次签署APK,请执行此操作 但请注意,Google Play不接受具有多个签名的APK。
例如。您可以使用jarsigner
从命令行sign an APK,如下所示:
jarsigner -keystore original-keystore my-app-unsigned.apk key-alias
别名
然后用第二个键重复一遍:
jarsigner -keystore new-signing-keystore my-app-unsigned.apk key-alias
之后不要忘记运行zipalign:
zipalign -v 4 my-app-unsigned.apk my-app.apk
我刚刚重新阅读了有关MotoDev工作室的部分。在这种情况下,您可以像往常一样使用MotoDev首先签署APK,然后在命令行上使用新密钥进行签名。
答案 1 :(得分:4)
在看到@ ddcruver的评论(2010-06-05)和@cistearns评论(2011-03-01)之前,我很高兴看到这篇文章。
然而,您描述的转换方法实际上存在一个重大的安全问题(如果它按照您的预期工作),如果攻击者可以让您的用户安装他们的应用程序,那么攻击者可以轻松替换您的应用程序东西:
通常情况下,如果攻击者试图替换某些内容,则安装将拒绝,除非删除原始内容 - 此时数据将被删除。
另一方面,仍然存在几个转换密钥/证书的有效用例:密钥更新,移交给另一个开发人员等。
通过授权从旧密钥转换到新密钥,可以更安全地完成此操作。请参阅issue in the Android project。
答案 2 :(得分:2)
我今天遇到了问题,这就是我所做的:
keytool -importkeystore -srckeystore motodev.keystore -srckeystoretype JCEKS -destkeystore android.keystore -destkeystoretype JKS
现在可以在Google Eclipse插件中使用android.keystore文件将您的应用程序导出到已签名的APK