2014-11-24 74 views
0

來自Android 5.0框架源代碼的NotificationManagerService.java。 我不明白何時uid將爲零。Android系統的uid等於零時意味着什麼

private static boolean isUidSystem(int uid) { 
    final int appid = UserHandle.getAppId(uid); 
    return (appid == Process.SYSTEM_UID || appid == Process.PHONE_UID || uid == 0); 
} 

回答

1

Android的Process類包含了以下定義(其中包括)返回true:

/** 
* Defines the root UID. 
*/ 
public static final int ROOT_UID = 0; 

/** 
* Defines the UID/GID under which system code runs. 
*/ 
public static final int SYSTEM_UID = 1000; 

/** 
* Defines the UID/GID under which the telephony code runs. 
*/ 
public static final int PHONE_UID = 1001; 

這些構架值對應於內核uid S爲rootsystem,和radio用戶。在Android中,許多系統進程都作爲這三個uid之一運行。

NotificationManagerService使用isUidSystem()來檢查調用進程是否屬於其中一個用戶,如果是,請設置布爾型isSystemNotification(如果包名以android.*開頭,它也會變爲true)。

注意isSystemUid不直接比較上述值主叫uid,但首先運行它通過UserHandle.getAppId(),這需要內核值和器官功能障礙綜合徵它與UserHandle.PER_USER_RANGE,通常定義爲100000(即,uid % PER_USER_RANGE)。這最終成爲內核uid的最後五位數字,其中前兩個數字對應於多用戶設備上的userId

所以uidappId將爲0對於運行作爲根用戶進程和應用程序,並且將isSystemUid()在這種情況下返回true。只要uid來自作爲systemradio用戶運行的呼叫者,它也會返回true。

1

我剛纔算了一下,該代碼意味着只對系統的UID,電話UID和根的UID(等於0)