多个 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;
}
假设以下情况:
我有 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;
}