uid值为1000属于Android系统。 Android 的许多功能都涉及将请求代理到系统线程进行处理。如果在此期间抛出异常,错误将包括系统的 uid,而不是原始请求者。
对于其他点:
UserHandle.isSameApp(uid, mMyUid) is false
UserHandle.isSameUser(uid, mMyUid) is true
通过查看这些最容易解释source https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/UserHandle.java。在支持多用户的 Android 设备上,每个用户都由一系列 UID 定义。isSameApp
为 false,因为 ids 的模数不匹配:
public static final boolean isSameApp(int uid1, int uid2) {
return getAppId(uid1) == getAppId(uid2);
}
public static final int getAppId(int uid) {
return uid % PER_USER_RANGE;
}
同样,这两个 id 属于同一用户,因为它们位于同一范围内:
public static final boolean isSameUser(int uid1, int uid2) {
return getUserId(uid1) == getUserId(uid2);
}
public static final int getUserId(int uid) {
if (MU_ENABLED) {
return uid / PER_USER_RANGE;
} else {
return 0;
}
}
请注意,此逻辑是有缺陷的,因为它意味着所有 Android 系统 uid(
另请注意,如果第二个用户安装了超过 1000 个应用程序(!),则应用程序可能会被误认为是系统应用程序(两者都uid % PER_USER_RANGE
将返回 1000)。但这并不重要,因为强大的沙箱会阻止任何事情too bad从发生。