以下是Android O中checkCallingPermission()的代码:
public static int checkCallingPermission(@NonNull Context context,
@NonNull String permission, String packageName) {
if (Binder.getCallingPid() == Process.myPid()) {
return PackageManager.PERMISSION_DENIED;
}
return checkPermission(context, permission, Binder.getCallingPid(),
Binder.getCallingUid(), packageName);
}
有一个PID检查,如果调用的PID与本地PID匹配,则会拒绝权限。
我试图理解为什么要添加它。此检查是否可以避免安全问题?
背景:
我有一个AAR库,有些客户将(1)通过直接包含在其应用程序中使用,而另一些客户将(2)通过活页夹包装在服务中。在这两种情况下,客户应用程序都必须具有特定的系统权限才能成功调用我的API,而其他没有该权限的第三方应用程序应被拒绝访问我的API。
我想编写对case(1)执行checkSelfPermission()但对case(2)执行checkCallingPermission()的代码
执行此操作的好方法似乎使用以下代码:
mContext.checkPermission(mPermStr, Binder.getCallingPid(), Binder.getCallingUid()));
这有效地实现了我想要的。
我试图了解是否通过此方法引入了任何安全性或权限泄漏问题。