Android内核剖析读书笔记

简介:
第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,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Web App开发 小程序 前端开发
【产品上新】小程序新内核来了!提升安卓浏览器性能,支持WebRTC
【产品上新】小程序新内核来了!提升安卓浏览器性能,支持WebRTC
38 0
|
3月前
|
Linux Android开发
Android 正常运行所需的一系列 Linux 内核接口
Android 正常运行所需的一系列 Linux 内核接口
53 0
|
4月前
|
缓存 算法 Java
Linux内核新特性年终大盘点-安卓杀后台现象减少的背后功臣MGLRU算法简介
MGLRU是一种新型内存管理算法,它的出现是为了弥补传统LRU(Least Recently Used)和LFU(Least Frequently Used)算法在缓存替换选择上的不足,LRU和LFU的共同缺点就是在做内存页面替换时,只考虑内存页面在最近一段时间内被访问的次数和最后一次的访问时间,但是一个页面的最近访问次数少或者最近一次的访问时间较早,可能仅仅是因为这个内存页面新近才被创建,属于刚刚完成初始化的年代代页面,它的频繁访问往往会出现在初始化之后的一段时间里,那么这时候就把这种年轻代的页面迁移出去
|
28天前
|
移动开发 监控 小程序
mPaaS 常见问题之Android 14uc内核不生效如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
15 0
|
Linux 编译器 Android开发
【Android 逆向】Android 系统文件分析 ( /proc/ 目录文件分析 | 记录系统和进程信息 | version 内核版本信息文件 )
【Android 逆向】Android 系统文件分析 ( /proc/ 目录文件分析 | 记录系统和进程信息 | version 内核版本信息文件 )
209 0
【Android 逆向】Android 系统文件分析 ( /proc/ 目录文件分析 | 记录系统和进程信息 | version 内核版本信息文件 )
|
Android开发
【Binder 机制】分析 Android 内核源码中的 Binder 驱动源码 binder.c ( googlesource 中的 Android 内核源码 | 内核源码下载 )(二)
【Binder 机制】分析 Android 内核源码中的 Binder 驱动源码 binder.c ( googlesource 中的 Android 内核源码 | 内核源码下载 )(二)
268 0
|
Android开发
【Binder 机制】分析 Android 内核源码中的 Binder 驱动源码 binder.c ( googlesource 中的 Android 内核源码 | 内核源码下载 )(一)
【Binder 机制】分析 Android 内核源码中的 Binder 驱动源码 binder.c ( googlesource 中的 Android 内核源码 | 内核源码下载 )(一)
141 0
【Binder 机制】分析 Android 内核源码中的 Binder 驱动源码 binder.c ( googlesource 中的 Android 内核源码 | 内核源码下载 )(一)
|
Web App开发 JavaScript Java
Android 项目集成腾讯X5浏览器内核
1、为什么要集成腾讯 X5 浏览器内核 肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因。
2727 0