PMS及APP安裝過程
阿新 • • 發佈:2018-12-07
--摘自《android外掛化開發指南》
1.PackageManagerService(PMS)是用來獲取apk包的資訊的
2.AMS總是會使用PMS載入包的資訊,將其封裝在LoadedApk這個類物件中,然後從中取出清單檔案申請的四大元件資訊
3.為什麼app安裝時,不把它解壓呢?因為每次從apk中讀取資源,並不是先解壓再找圖片資源,而是解析apk中的resources.arsc檔案,這個檔案儲存著資源的所有資訊,包括資源在apk中的地址,大小等。所以可以快速定位到相應資原始檔,是一種很高效的演算法。不解壓的原因是節省空間
4.PMS中有個類PackageParse,是專門用來解析androidmanifest檔案的,其中parsePackage方法返回的是Package型別的實體物件,然後使用generatePackageInfo方法,將其轉換為PackageInfo型別
APP安裝流程
第一步:PMS解析apk的清單檔案,讀取四大元件的資訊
第二步:為app分配使用者ID和使用者組ID(按照許可權分組)
第三步:在Launcher生成一個icon,icon中儲存著預設啟動的activity資訊
第四步:把上面的資訊記錄在一個xml檔案中,以備下次安裝使用
IPackageManager是一個AIDL,以下語句返回的是相同的物件,都是PMS在APP程序的代理物件,都能獲得當前apk包的資訊
1)Context.getPackageManager()
2)ActivityThread.getPackageManager()
3)ActivityThread的sPackageManager
4)ApplicationPackageManager的mPM欄位