假设以下情况:
我有2个应用程序:A1& A2。
A1定义了一个签名级别权限,让我们说" com.example.myapp.PERMISSION"。
A2声明A1定义的许可。
我有2个签名密钥:K1& K2。
A1与K1& K2。 A2仅使用K1签名。
如果A1公开了受" com.example.myapp.PERMISSION"保护的服务。权限,A2可以访问该服务吗?是否必须为两个应用程序提供所有签名,或者只要两者之间存在匹配,它是否会起作用?
答案 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;
}