zoukankan      html  css  js  c++  java
  • 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名稱的情況。
  • 相关阅读:
    HashSet
    HashMap
    commons-configuration读取配置文件
    JAVA多线程和并发基础面试问答(转载)
    集合
    java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和联系
    七段数码管绘制
    函数的定义与使用
    程序的分支控制
    文本进度条
  • 原文地址:https://www.cnblogs.com/linlf03/p/3370227.html
Copyright © 2011-2022 走看看