第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. CentOS下启动Tomcat

     http://tianlihu.iteye.com/blog/2010028 1. Tomcat的部署包存放的路径 /var/lib/tomcat6/webapps/ 2. Tomcat的配置文件路 ...

  2. 《JavaScript Ninja》之挥舞函数

    挥舞函数 匿名函数为什么如此重要 通常使用匿名函数的情况是,创建一个供以后使用的函数.例如,将匿名函数保存在一个变量里,将其作为一个对象的方法,或者是将匿名函数作为一个回调.-->在这些情况下, ...

  3. 《JS高程》JS-Object对象整理

    继上篇<JS高程>对象&原型笔记,对JavaScript中的Object对象进行了整理,梳理一遍~ 参考文章:详解Javascript中的Object对象 ------------ ...

  4. 听VOA还不如学这些 (转自知乎恶魔奶爸)

    该专栏文章网址 http://zhuanlan.zhihu.com/aisapo/19634180 鉴于知乎无法插图片和音频,所以有了这篇教程集合,大家看这个就足够了其实 每次一学英语,材料无非就是V ...

  5. java的getClass()函数

    Java反射学习 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代 ...

  6. 2015GitWebRTC编译实录3

    2015.05.17 librtprtcp 编译通过[702/1600 ] CXX obj /webrtc/modules/rtp_rtcp/source/rtp_rtcp.bitrate.o[703 ...

  7. ZOJ 1099 HTML

    原题链接 题目大意:按照HTML的语法处理一段字符.这道题算是字符串类型的经典,熟练之后可以做一个简单的html解析器了. 解法:没什么好说的,直接代码. 参考代码: #include<iost ...

  8. my PhoneWeb

    <meta name="viewport" content="width=device-width, user-scalable=yes, minimum-scal ...

  9. JS初学之-js的a:hover

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...

  10. URAL 1176 Hyperchannels(欧拉回路路径)

    Hyperchannels Time limit: 1.0 secondMemory limit: 64 MB The Galaxy Empire consists of N planets. Hyp ...