閱讀本文大約需要花費15分鐘。
專注於Android系統級源碼分析,Android的平臺設計,歡迎關注我,謝謝!
上一節看了PackageManagerService的工作流程 ,這一節來看看PKMS的權限掃描。
系列文章:
5 權限掃描
PKMS systemReady()時,通過SystemConfig的readPermissionsFromXml()來掃描讀取/system/etc/permissions中的xml文件,包括platform.xml和系統支持的各種硬件模塊的feature主要工作:
參考下圖:
下面就針對於上述內容,進行分析
5.1 [SystemConfig.java] readPermissions()
說明:掃描/system/etc/permissions中文件,調用
readPermissionsFromXml()進行解析,存入SsytemConfig相應的成員數組變量中
解析xml的標籤節點,存入mGlobalGids、mPermissions、mSystemPermissions等成員變量中,供其他進行調用
5.2 XML文件
/system/etc/permissions中會存在很多的xml文件,例如我們看下
android.software.webview.xml的文件,內容如下:
裡面只只有一個feature "android.software.webview",大部分的xml都是類似的定義方式。
讓我們來簡單的看下/system/etc/permissions/platform.xml的內容
platform.xml中出現的標籤種類則較為多樣,它們的含義分別是:
- <group>:根據name獲取gid/<group>
- <permission>標籤:把屬性name所描述的權限賦予給<group>標籤中屬性gid所表示的用戶組,一個權限可以有一個或多個group對象,當一個APK授權於這個這個權限時,它同時屬於這幾個組/<group>/<permission>
- <assign-permission>標籤:把屬性name所描述的權限賦予給uid屬性所表示的用戶/<assign-permission>
- <split-permission>標籤:一個權限可以擴展出一個新的權限/<split-permission>
- <library>標籤:除framework中動態庫以外的,所有系統會自動加載的動態庫/<library>
- <feature>標籤:硬件支持的一些feature/<feature>
- <oem-permission>標籤:oem廠商自己定義的一些權限/<oem-permission>
- <privapp-permission>標籤:來自system、vendor、product、system_ext的privapp權限分別存儲,這是防止供應商分區中的xml授權於系統分區中的私有應用權限/<privapp-permission>
最後將上面xml解析出來的數據做如下存儲:
- <group>標籤gid屬性的值會存放在mGlobalGids數組中;/<group>
- <permission>標籤,解析得到的值會存放在mPermissions集合中;/<permission>
- <assign-permission>標籤解析得到的值會存放在mSystemPermissions中;/<assign-permission>
- <split-permission>存儲在mSplitPermissions/<split-permission>
- <library>標籤解析得到的值會存放在mSharedLibraries中;/<library>
- <feature>存儲在mAvaliableFeatures/<feature>
- <oem-permission>存儲在mOemPermissions/<oem-permission>
- <privapp-permission>會根據不同的存儲路徑,分別存儲在mVendorPrivAppPermissions、mProductPrivAppPermissions、mSystemExtPrivAppPermissions、mPrivAppPermissions/<privapp-permission>
下一節將會講解PKMS 的APK掃描、安裝等內容,歡迎關注我
閱讀更多 IngresGe 的文章