正如标题所解释的,我想知道是否有方法(代码)知道生成的应用程序(.apk)使用调试证书或导出证书签名?我想在我的应用程序中检查这个,这样我可以启用/禁用某些功能,这取决于证书的类型。如何以编程方式知道应用程序是使用调试或导出证书签名的?
我想知道Google在通过开发者控制台上传市场中的应用时,Google是如何验证这些信息的?
任何建议/代码将不胜感激。
正如标题所解释的,我想知道是否有方法(代码)知道生成的应用程序(.apk)使用调试证书或导出证书签名?我想在我的应用程序中检查这个,这样我可以启用/禁用某些功能,这取决于证书的类型。如何以编程方式知道应用程序是使用调试或导出证书签名的?
我想知道Google在通过开发者控制台上传市场中的应用时,Google是如何验证这些信息的?
任何建议/代码将不胜感激。
我发现这个资源,它描述了你正在努力解决的问题。本页面描述了如何在代码中获取关于密钥库的信息。
http://daniel-codes.blogspot.com/2011/04/detecting-keystore-signature-in-code.html
您将只能使用您的导出证书将您的应用部署到Android Market。
如果未使用您在上传第一个APK时使用的相同证书签名,则AM会拒绝您的APK。
看起来您可以从:javax.security.auth.Subject包中获取有关公钥的信息(尝试getPublicCredentials()方法)。我自己并没有使用它。
是的,我知道我们需要使用相同的证书更新应用程序。但我在寻找的是应用程序中的证书信息,如姓名,公司,组织,isDebug等。 – waqaslam 2012-03-02 14:21:13
我用
final PackageInfo info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
ApplicationUtils.DEBUG_ENABLED = (info.applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
启用/禁用调试日志记录。
哪个软件包包含'ApplicationUtils'? – waqaslam 2012-03-02 14:22:48
'ApplicationUtils'是我自己的一类静态变量/函数,它在'Application.onCreate'中被初始化。 – techiServices 2012-03-02 14:26:34
当使用调试密钥构建APK时,将自动为您设置调试标志,因此您无需将其设置在清单中。 – techiServices 2012-03-02 14:33:36
公司名称称为Android调试,用于调试密钥。
运行jarsigner -verbose -certs -verify针对调试和签名的apks。你会看到调试apk,CN字段被称为Android调试。对于您签名的apk,它是密钥签名者的名称。
这可能是Google和其他市场在上传到市场时检查密钥的方式。像其他人说的那样,您将无法将使用调试密钥签名的应用程序上传到市场,所以我不知道为什么您需要检查此问题。
正如我所说,我不是在谈论上传或更新市场上的应用程序。我只是想在代码中知道这些字段。有没有可能? – waqaslam 2012-03-02 14:26:17
的可能的复制[如何检查是否APK签署或 “调试版本”?](http://stackoverflow.com/questions/7085644/how-to-check-if-apk-is -signed-or-debug-build) – grebulon 2017-01-25 10:50:06