如何比较Android中两个应用程序包的签名?

时间:2014-10-07 08:19:15

标签: java android

我希望检查两个应用程序是否具有相同的签名。我在这里看到了类似的问题:

Can I check if two android apps are signed with the same key?

我能够得到所描述的程序但是在评论中写了#34;这不能保证工作" 。关于什么参数 签名变得独特。我可以使用签名的哈希码来比较签名。请帮忙!

2 个答案:

答案 0 :(得分:3)

检查2个应用的最简单方法:

int i = mContext.getPackageManager().checkSignatures(pkg1, pkg2);
boolean matching = i == PackageManager.SIGNATURE_MATCH;

答案 1 :(得分:0)

apk可以有多个签名。比较签名的正确方法是使用hashCode()方法。

您可以使用以下代码段创建两个包的签名的HashSet(根据您的需要进行修改,但尚未测试)

HashSet<String> signatureSet = new HashSet<String>();   
Signature[] signatures = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature signature : signatures)
{
    signatureSet.add(signature.hashCode());
}

现在,您可以使用set操作来检查签名的相似程度。 例如,检查app1是否具有app2的所有签名(这应该足以满足大部分时间)。

signatureSet1.containsAll(signatureSet2);