如何通过编程方式了解应用程序是否使用调试或导出证书进行签名?

时间:2012-03-02 14:06:34

标签: java android certificate signed

正如标题所解释的,我想知道是否有方法(代码)知道生成的应用程序(.apk)是使用 Debug 证书或 Export 证书?我想在我的应用程序中检查这个,以便我可以启用/禁用某些功能,具体取决于证书的类型。

我想知道Google是否会在我们通过开发者控制台在Market上传应用时验证此信息?

任何建议/代码将不胜感激。

4 个答案:

答案 0 :(得分:2)

我用

final PackageInfo info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
ApplicationUtils.DEBUG_ENABLED = (info.applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;

启用/禁用调试日志记录。

答案 1 :(得分:1)

我找到了这个资源,它描述了你想要解决的问题。本页介绍如何在代码中获取有关密钥库的信息。

http://daniel-codes.blogspot.com/2011/04/detecting-keystore-signature-in-code.html

答案 2 :(得分:0)

您只能使用导出证书将应用部署到Android电子市场。

如果您的APK未使用您上传第一张APK时使用的相同证书进行签名,则会拒绝您的APK。

看起来您可以从以下命令获取有关公钥的信息:javax.security.auth.Subject包(尝试使用getPublicCredentials()方法)。我自己没有用过。

答案 3 :(得分:0)

公司名称称为调试密钥的Android Debug。

对调试和签名的apks运行jarsigner -verbose -certs -verify。您将看到调试apk,CN字段称为Android调试。对于您签名的apk,它是密钥签名者的名称。

这可能是谷歌和其他市场在上传到市场时检查密钥的方式。像其他人说的那样,你将无法将使用调试密钥签名的应用程序上传到市场,所以我不知道为什么你需要检查这个。