Android 10.0 PackageManagerService(二)權限掃描


Android 10.0 PackageManagerService(二)權限掃描

閱讀本文大約需要花費15分鐘。

專注於Android系統級源碼分析,Android的平臺設計,歡迎關注我,謝謝!

上一節看了PackageManagerService的工作流程 ,這一節來看看PKMS的權限掃描。


系列文章:


5 權限掃描

PKMS systemReady()時,通過SystemConfig的readPermissionsFromXml()來掃描讀取/system/etc/permissions中的xml文件,包括platform.xml和系統支持的各種硬件模塊的feature主要工作:

參考下圖:

Android 10.0 PackageManagerService(二)權限掃描

下面就針對於上述內容,進行分析


5.1 [SystemConfig.java] readPermissions()

說明:掃描/system/etc/permissions中文件,調用

readPermissionsFromXml()進行解析,存入SsytemConfig相應的成員數組變量中

Android 10.0 PackageManagerService(二)權限掃描

解析xml的標籤節點,存入mGlobalGids、mPermissions、mSystemPermissions等成員變量中,供其他進行調用

Android 10.0 PackageManagerService(二)權限掃描

5.2 XML文件

Android 10.0 PackageManagerService(二)權限掃描

/system/etc/permissions中會存在很多的xml文件,例如我們看下

android.software.webview.xml的文件,內容如下:

Android 10.0 PackageManagerService(二)權限掃描

裡面只只有一個feature "android.software.webview",大部分的xml都是類似的定義方式。

讓我們來簡單的看下/system/etc/permissions/platform.xml的內容

Android 10.0 PackageManagerService(二)權限掃描

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掃描、安裝等內容,歡迎關注我


分享到:


相關文章: