多个APK签名 - 签名protectionLevel行为

时间:2016-01-25 18:56:06

标签: android android-permissions

假设以下情况:

我有2个应用程序:A1& A2。

A1定义了一个签名级别权​​限,让我们说" com.example.myapp.PERMISSION"。

A2声明A1定义的许可。

我有2个签名密钥:K1& K2。

A1与K1& K2。 A2仅使用K1签名。

如果A1公开了受" com.example.myapp.PERMISSION"保护的服务。权限,A2可以访问该服务吗?是否必须为两个应用程序提供所有签名,或者只要两者之间存在匹配,它是否会起作用?

1 个答案:

答案 0 :(得分:2)

Android将所有签名视为Set - 2个应用程序必须具有相同的一组签名才能被视为等效。因此,在您的示例中,A2不会被授予权限,因为它的签名集不等于A1。

以下是source code

中的代码
    ArraySet<Signature> set1 = new ArraySet<Signature>();
    for (Signature sig : s1) {
        set1.add(sig);
    }
    ArraySet<Signature> set2 = new ArraySet<Signature>();
    for (Signature sig : s2) {
        set2.add(sig);
    }
    // Make sure s2 contains all signatures in s1.
    if (set1.equals(set2)) {
        return PackageManager.SIGNATURE_MATCH;
    }
    return PackageManager.SIGNATURE_NO_MATCH;
}