第16章 程序包管理 PackageManagerService類 PmS
目錄
16.1 包管理概述
16.2 packages.xml文件格式
16.3 包管理服務的啟動過程
16.4 應用程序的安裝和卸載
16.5 intent匹配框架
16.1 包管理概述
1.包管理服務的程序結構
分別為應用程序層,PmS服務層,及數據文件層
應用程序層 DontextImpl.ApplicationPackageManager
Pms服務層 /data/system/packages.xml 所有应用程序与包管理相关信息
/system/etc/permisions/xxx.xml 加载系统feature,并为核心系统进程分配默认权限
PackageManagerService
DefaultContainerService : 把安裝程序複製到程序目錄中。
Installer: 實際上是一個Socket客戶端。
程序文件層 /system/app 系统自带应用程序路径
/data/app 第三方应用程序层
/data/dalvik-cache/dex文件输出路径
/system/framework/*.apk;*.jar framework中的程序
/data/secure 加密文件
/data/drm/ drm用户专有目录
/data/app-private/ drm用户专有目录
/data/data/ 普通程序数据
16.2 packages.xml文件格式
保存在 /data/system目錄下,裏面有很多標籤,如last-platform-version, permission-trees等。
16.3 包管理服務的啟動過程
包管理服務的啟動過程實際上市讀取XML文件中的信息,并把這些信息存放到相關的類成員變量中。
1.創建PmS。Settings對象
2.mSettings.addShareduserLP() 添加四個共享id。
3.創建一個Installer對象,該對象將輔助程序的安裝。
4.給幾個數據文件賦值。如mAppDataDir,mSecureAppDataDir,mDrmAppPrivateInstallDir。
5.調用readPermission函數。
6.調用沒Setting對象的readLP函數,讀取應用程序和包管理相關信息。
7.對java系統中的庫進行dex提取。
8為三個程序目錄創建一個FileObserver。FileObserver对象内部会检测目录中的添加、删除事件。這三個目錄是
/system/frameworks: 该目录保存了framework內核相關程序
/system/app:系统程序
/verdor/app:第三方程序,一般指厂商开发的自定义程序。
9 调用scanDirLI()掃描(解析程序中的Androidmanifest.xml)以上三個目錄中的所有程序文件,并將掃描結果放到PmS中的mPackages變量中。
10 刪除已經不存在程序對應的數據記錄。
11 清除沒有安裝成功的數據記錄。
12 為一下兩個第三方程序目錄添加FileObserver,并調用scanDirLI()解析目錄下所有的應用程序。
這連個目錄如下。
/data/app: 普通應用程序目錄。
/data/app-private: 該目錄沒錢并沒有被使用。
13 刪除/data/app目錄下以vmdl開頭及以.tmp结尾的文件。
14 如果系統版本升級,調用updatePermissionLP() 重新為應用程序賦予權限。
15 調用writeLP() 將mPackages中的數據重新寫入packages.xml文件中。
以上就是Pms啟動的主體功能。
16.4 應用程序的安裝和卸載
安裝和卸載應用程序都由PmS完成。安裝程序的過程包括在程序目錄下創建以包命名的程序文件、創建程序數據目錄,以及把程序相關的信息保存到相關的配置文件packages.xml文件中,卸載過程則是相反的操作。
16.5 intent匹配框架
intent匹配主要解決應用程序中沒有明確指定Component名稱的情況。
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/p/3370227.html,如需转载请自行联系原作者
微信关注我们
原文链接:https://yq.aliyun.com/articles/359552
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
相关文章
发表评论
资源下载
更多资源Mario
马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。
Eclipse
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。
JDK
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
Sublime Text
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。