第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名稱的情況。

Android内核剖析读书笔记的更多相关文章

  1. Android内核剖析读书笔记(1)—Framework概述

    一.Framework组成 1.服务端组成 a.WindowManagerService     决定各窗口的叠放次序.隐藏或者显示窗口 b.ActivityManagerService   管理应用 ...

  2. STL源码剖析读书笔记之vector

    STL源码剖析读书笔记之vector 1.vector概述 vector是一种序列式容器,我的理解是vector就像数组.但是数组有一个很大的问题就是当我们分配 一个一定大小的数组的时候,起初也许我们 ...

  3. 《深入理解Linux内核》 读书笔记

    深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...

  4. STL源码剖析读书笔记--第四章--序列式容器

    1.什么是序列式容器?什么是关联式容器? 书上给出的解释是,序列式容器中的元素是可序的(可理解为可以按序索引,不管这个索引是像数组一样的随机索引,还是像链表一样的顺序索引),但是元素值在索引顺序的方向 ...

  5. Android内核剖析(1)

    Linux的启动过程 开机上电执行bootloader,将内核的前n条指令加载到系统内存中------>系统内核的初始化----------->启动应用程序. bootloader的位置装 ...

  6. 《Android内核剖析》读书笔记 第13章 View工作原理【View树遍历】

    View状态分类 在View视图中定义了多种和界面效果相关的状态,比如拥有焦点Focused.按下Pressed等,不同的状态一般会显示不同的界面效果,而且视图状态会随着用户的操作而改变,一般通过xm ...

  7. 《Android内核剖析》读书笔记 第13章 View工作原理【View重绘过程】

    计算视图大小的过程(Measure) 视图大小,准确的来说应该是指视图的布局大小:我们在layout.xml中为每个UI控件设置的layout_width/layout_height两个属性被用来设置 ...

  8. Android进阶加密-第1章-Android系统架构-读书笔记

    第 1 章 Android 系统架构 1.1 Android 系统架构 Android 系统架构分为五层,从上到下依次是应用层.应用框架层.系统运行库层.硬件抽象层和 Linux 内核层. 应用层(S ...

  9. Android驱动开发读书笔记六

    第六章 Linux 驱动的工作和访问方式是 Linux 的亮点之一,Linux 系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,由于大多数Linux驱动都有与 ...

随机推荐

  1. magento中的ajax

    <script type="text/javascript">        function loadRecommend(){         $.ajax({    ...

  2. 归档 Archive、解档Unchive、 XML(一)

    1 使用归档的方式保存文件 1.1 问题 归档是任何对象都可以实现的更常规的方式,可以进行归档的对象需要实现NSCoding协议,而且每个实例变量应该是基本数据类型或者是实现NSCoding协议的某个 ...

  3. Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    Android应用的开发过程中需要把繁重的任务(IO,网络连接等)放到其他线程中异步执行,达到不阻塞UI的效果. 下面将由浅入深介绍Android进行异步处理的实现方法和系统底层的实现原理. 本文介绍 ...

  4. 关于UIMenuController的使用 弹出菜单 UIMenuItem

    UIMenuController *menuController = [UIMenuController sharedMenuController];        UIMenuItem *menuI ...

  5. Examining Open vSwitch Traffic Patterns

    In this post, I want to provide some additional insight on how the use of Open vSwitch (OVS) affects ...

  6. 【转】eclipse 安装插件

    eclipse安装插件或许没有什么多的可讲,但对于刚刚接触eclipse这款IDE的新手来说,可能还是会有点棘手! eclipse安装插件大致三种方法: 方法一:自身安装器 使用eclipse的Sof ...

  7. allpaths 使用

    软件下载与说明:http://www.broadinstitute.org/software/allpaths-lg/blog/?page_id=12 原始数据的深度要达到100以上. 至少要两个库, ...

  8. 创建数据库时报"FILESTREAM 功能被禁用"

    问题,创建含有FileStream数据库时报"FILESTREAM 功能被禁用" 解决方式 修改数据库属性 打开管理配置工具,右键打开sql server的属性,查看FILESTR ...

  9. hdu 2334 March of the Penguins

      题意大意 在X,Y坐标系中有N(N<=100)个冰块,有些冰块上有1若干只企鹅,每只企鹅一次最多跳M距离,一个冰块在有Mi个企鹅离开,就会消失,问有哪些冰块可以作为集合点,就是所有企鹅都能成 ...

  10. HDU 5692 线段树+dfs序

    Snacks Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...