2012-03-02 35 views
3

正如标题所解释的,我想知道是否有方法(代码)知道生成的应用程序(.apk)使用调试证书或导出证书签名?我想在我的应用程序中检查这个,这样我可以启用/禁用某些功能,这取决于证书的类型。如何以编程方式知道应用程序是使用调试或导出证书签名的?

我想知道Google在通过开发者控制台上传市场中的应用时,Google是如何验证这些信息的?

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

+0

的可能的复制[如何检查是否APK签署或 “调试版本”?](http://stackoverflow.com/questions/7085644/how-to-check-if-apk-is -signed-or-debug-build) – grebulon 2017-01-25 10:50:06

回答

1

我发现这个资源,它描述了你正在努力解决的问题。本页面描述了如何在代码中获取关于密钥库的信息。

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

+0

嗯这似乎是一个好主意 – waqaslam 2012-03-26 10:49:42

+0

404 - 找不到 – Hamidreza 2016-11-01 14:18:27

+0

这个答案给出了一个如何做到这一点的例子:http://stackoverflow.com/a/11535593/2603965 – grebulon 2017-01-25 10:49:44

0

您将只能使用您的导出证书将您的应用部署到Android Market。

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

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

+0

是的,我知道我们需要使用相同的证书更新应用程序。但我在寻找的是应用程序中的证书信息,如姓名,公司,组织,isDebug等。 – waqaslam 2012-03-02 14:21:13

2

我用

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

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

+0

哪个软件包包含'ApplicationUtils'? – waqaslam 2012-03-02 14:22:48

+0

'ApplicationUtils'是我自己的一类静态变量/函数,它在'Application.onCreate'中被初始化。 – techiServices 2012-03-02 14:26:34

+1

当使用调试密钥构建APK时,将自动为您设置调试标志,因此您无需将其设置在清单中。 – techiServices 2012-03-02 14:33:36

0

公司名称称为Android调试,用于调试密钥。

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

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

+0

正如我所说,我不是在谈论上传或更新市场上的应用程序。我只是想在代码中知道这些字段。有没有可能? – waqaslam 2012-03-02 14:26:17

相关问题