Android - 如何判断apk已使用我的密钥签名

时间:2014-02-18 16:42:25

标签: android key apk android-keystore

我们已经为我们创建了第三方应用,但我们将继续推进。

他们已经构建了apk并使用自己的密钥对其进行了签名,但为了让我们上传并使用我们的密钥,我不得不重新签名。

为此,我使用了https://code.google.com/p/apk-resigner/

现在我正在尝试将他们的apk与我已辞职的人进行比较,但我并不是100%确定要做什么。

我已经尝试过了

jarsigner -verify -keystore my_keystore_location -verbose -certs my.apk

我收到了很多带有smk的文件。这在键

之后是有意义的
s = signature was verified 
m = entry is listed in manifest
k = at least one certificate was found in keystore
i = at least one certificate was found in identity scope

但是当我运行仍然有他们的密钥的第三方apk时,我也得到了文件的smk,这不应该发生,因为它会说它已经用我的密钥库中的密钥签名了!?

任何想法?

由于

1 个答案:

答案 0 :(得分:1)

我不确定这是否有效,但我在包管理器中发现它: http://developer.android.com/reference/android/content/pm/PackageManager.html#checkSignatures(java.lang.String, java.lang.String)

它应该能够获取您的第一个包(您自己)的签名,并将其与您的第三方应用程序的签名进行比较。这是在Android应用程序上运行而不是在您的开发平台(Windows,Mac,Linux等)上运行。

查看文档,如果返回0,则签名匹配。如果返回1,则不签名。 -3不匹配。 -2表示没有第二个包未签名,-1表示第一个包未签名。 -4如果任何一个包都无效。

此代码对我有用:

final PackageManager pm = getPackageManager();
System.out.println(pm.checkSignatures("com.testing1", "com.testing2"));