多个 APK 签名 - 签名保护级别行为

Multiple APK signing - signature protectionLevel behavior

假设以下情况:

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

A1 定义了签名级别权​​限,比方说 "com.example.myapp.PERMISSION"。

A2 要求 A1 定义的权限。

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

A1 与 K1 和 K2 均已签名。 A2 只用 K1 签名。

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

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;
}