我可以检查两个Android应用程序是否使用相同的密钥签名吗?

sr0*_*r09 5 java android

我想检查App A和App B的签名是否相同。

我想在App A中进行检查,并根据比较结果调用一个方法。

public boolean compareAppSignatures() {
    Signature[] sigA = getPackageManager().getPackageInfo(getPackageName(),PackageManager.GET_SIGNATURES).signatures;
    Signature[] sigB = getPackageManager().getPackageInfo("<App B package name>",PackageManager.GET_SIGNATURES).signatures;
    return Arrays.equals(sigA, sigB);
}
Run Code Online (Sandbox Code Playgroud)

这是一个好方法吗?另外,有没有办法检查它们是否使用相同的密钥签名?一个Android应用程序可以获取设备上安装的任何其他应用程序的签名列表吗?

Jit*_*yay 6

是的,您可以获得如下签名

PackageInfo pi = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
Log.i("test", pi.signatures[0].toCharsString());
Run Code Online (Sandbox Code Playgroud)

相应地,你可以这样做

Signature[] sigA = getPackageManager().getPackageInfo(getPackageName(),PackageManager.GET_SIGNATURES).signatures;
    Signature[] sigB = getPackageManager().getPackageInfo("<App B package name>",PackageManager.GET_SIGNATURES).signatures;
Run Code Online (Sandbox Code Playgroud)

比你可以比较如下

public boolean compareAppSignatures() {
    Signature[] sigA = getPackageManager().getPackageInfo(getPackageName(),PackageManager.GET_SIGNATURES).signatures;
    Signature[] sigB = getPackageManager().getPackageInfo("<App B package name>",PackageManager.GET_SIGNATURES).signatures;
    return Arrays.equals(sigA, sigB);
}
Run Code Online (Sandbox Code Playgroud)


sr0*_*r09 0

这不能保证有效。一个 APK 可以使用多个签名进行签名。我需要检查应用程序 B 是否包含两个应用程序都信任的签名证书。